假設迷宮從出發點到終點最多只有一條通路。
#include
//2016/4/14/15:11
#define max 100
struct path
;using
std::cin;
using
std::cout;
using
std::endl;
void findnext(path *s, int &i, int &j, int t[max], int top);
void maze(int t[max], int start_i, int start_j, int end_i, int end_j);
intmain()
else}}
maze(t, start_i, start_j, end_i, end_j);
return0;}
void
findnext(path *s, int &i, int &j, int t[max], int top)//找尋下乙個可能的位置,如果找不到則令i = 0, j = 0
else
if (t[i + 1][j] != 0 && i + 1 != s[top - 1].i)//向下探索
else
if (t[i][j - 1] != 0 && j - 1 != s[top - 1].j)//向左探索
else
if (t[i][j + 1] != 0 && j + 1 != s[top - 1].j)//向右探索
else
//未找到能走的點,以將i,j賦為0作為標誌
}void
maze(int t[max], int start_i, int start_j, int end_i, int end_j)
findnext(s, i, j, t, top);//通過本函式找到下乙個可走的位置
if (i == 0 && j == 0)//如果沒有可走的位置
else
//找到了可走的位置,則將其加入棧
}if (top == -1)//如果棧空,表明沒有通路
else
//如果棧不空,則棧中元素即使通往終點的通路
cout
<< "the length of path is "
<< top + 1
<< endl;//輸出路徑的長度
}}
用棧走迷宮問題
在這裡插入描述 棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除...
用棧實現迷宮s
迷宮問題是經典的一類問題,如何從給出的入口找到對應的出口,實現的方法和馬踏棋盤問題相似也是通過找到周圍 8個方向座標的關係,然後依據深度優先搜尋方法和一定的條件找到下一步對應的出路。由於迷宮問題需要儲存具體的完成路徑,這與前面的問題存在一定的差別。採用棧能夠很好的解決這個問題,其中棧結構用來儲存具體...
走迷宮 棧的使用
include define max stack size 64 define maze size 7 define exit row 5 define exit col 5 struct element struct offset char move str int maze maze size ...