老鼠迷宮問題是棧應用問題的乙個入門,通過對滿足要求的迷宮位置壓棧,同時,將位置置為不可用,來實現對從迷宮入口到出口的路徑尋找(非最優路徑)。
下面是關鍵的**:
#include "mymatrix.cpp"
#include
#include "mystack_array.cpp"
#include "pos.h"
void generatemat(mymatrix& mat)
}mat(2,2) = true;
mat(3,2) = true;
mat(3,3) = true;
mat(3,4) = true;
mat(3,5) = true;
mat(3,6) = true;
mat(3,6) = true;
mat(4,6) = true;
}bool findpath(mymatrix& mat)
std::stack
mst;
mst.push(cur);
mat(cur.rows(),cur.cols()) = false;
pos end(mat.rows() - 1, mat.cols() - 1);
pos offset[4];
offset[0] = pos(1,0);
offset[1] = pos(0,1);
offset[2] = pos(-1,0);
offset[3] = pos(0,-1);
int cnt = 0;
cur = cur + offset[cnt];
while (cur != end)
else
else
else}}
}if (cur == end && mat(cur.rows(), cur.cols()))
while (!mst.empty())
return ***;
}void main(void)
else
std::system("pause");
}
其中矩陣的類使用的是之前自己寫的矩陣模板類,棧使用的是stl的。pos類是用於表示矩陣位置的類。中間加入了一些列印的資訊來顯示整個過程。
當然,這個尋找路徑的過程並不是最優的過程,結果也不是最優的路徑,之後的佇列應用會獲得最佳結果。
下面是結果截圖:
《資料結構》 棧的應用 迷宮求解問題
利用棧求解迷宮問題 只輸出乙個解,演算法3.3 typedef struct 迷宮座標位置型別 postype define maxlength 25 設迷宮的最大行列為25 typedef int mazetype maxlength maxlength 迷宮陣列 行 列 全域性變數 mazety...
資料結構之棧的應用 迷宮求解
程式設計思想 1 迷宮地圖相關 利用動態二維陣列來初步勾勒出迷宮 建議先用malloc申請一維陣列,再用calloc申請每個元素中的一維陣列,因為我用的是1來表示迷宮的通路,0表示死路,calloc申請完後就會自動初始化為0 迷宮交岔路結點 我們要有乙個掃瞄通路的函式,對乙個座標進行東南西北的掃瞄,...
資料結構之迷宮問題
求迷宮問題就是求出從入口到出口的路徑。在求解時,通常用的是 窮舉求解 的方法,即從入口出發,順某一方向向前試探,若能走通,則繼續往前走 否則沿原路退回,換乙個方向再繼續 試探,直至所有可能的通路都試探完為止。為了保證在任何位置上都能沿原路退回 稱為回溯 需要用乙個後進先出的棧來儲存從入口到當前位置的...