問題描述:要實現自動查詢乙個迷宮的起點到終點的路線,不論是否是最佳,然後如果該路線存在,則輸出該路線各個點的座標。用棧來實現這這個程式
下圖是隨機測試時的一張樣例圖,程式的輸出為下面樣式。
這裡利用偽**自動生成的迷宮,可能需要多執行幾次才能有路徑可解的迷宮,以上為某次程式執行的結果顯示,
關於整個程式需要知道的關鍵點:
1.我們採用0為通路,1為阻塞;
2.這裡人的走向di採用上0,右1,下2,左3;
3.在自動生成迷宮時注意最外圍全為1(防止di進行試探時資料溢位);
3.每走過乙個方塊,將其設定為mg【i】【j】=1(防止行走成死迴圈);
對於main函式,一定要在mg陣列外圍全設定為1,例如:
外圍數字全為1,1表示阻塞。
關於ismg函式的l程式流程簡圖(這裡的第2到第5在乙個while(top>-1)的迴圈裡面):
該程式用c++實現**如下,c語言也可,稍加改變即可。
#include
#include
#include
#define r 8
//方塊的座標,位態
typedef
struct
box;
//建立順序棧的型別
typedef
struct
sqstack;
int mg[r]
[r];
//判斷是否存在出口
bool ismg
(int ii,
int ij,
int ei,
int ej)
return true;
} find=0;
while
(di<
4&&find==0)
if(mg[i]
[j]==
0)find=1;
}if(find==1)
else
}printf
("迷宮的出口路徑不存在。\n");
}int
main
(void
) mg[1]
[1]=
0;for(i=
0;i)printf
("\n");
}ismg
(ii,ij,ei,ej)
;return0;
}
線性表之棧
一種只能在一端進行插入或刪除操作的線性表被稱為棧,其中允許刪除或插入的一端為棧頂,另一端為棧底,棧底固定不變 棧的特點 先進後出,例如彈夾,先裝的子彈最後才能出 按照儲存結構可以分為兩種棧 順序棧的結構體定義 typedef struct sqstack 鏈棧結構體定義 typedef struct...
線性表之順序棧C 實現
線性表之順序棧 棧是限定僅在表尾 棧頂 進行插入刪除操作的線性表,filo 先進後出 一 順序棧的標頭檔案 seqstack.h 1 順序棧標頭檔案 2 include3 using namespace std 4 設定順序棧的大小 5const int stacksize 10 6 templat...
線性表之陣列實現棧結構
棧結構的陣列實現是用乙個一維陣列存放資料,資料每次從隊尾加入,刪除時也從隊尾刪除,要實現這種增刪操作需要使用乙個記錄下標的指標 top 來指向棧頂。當新增元素時新增到 arr top 1 位置,當要做刪除操作時 使top 指向倒數第二個元素,使其稱為新棧頂。舊棧頂則被忽略,當其所佔空間要使用時直接覆...