定義乙個二維陣列:解題思路:int maze[5][5] = ;
它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。
input
乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。
output
左上角到右下角的最短路徑,格式如樣例所示。
sample input
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
sample output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
找最短路徑部分不難,就是典型的廣搜模板。但是輸出起點到終點的座標還是有點麻煩的,我在原來的結構體裡加了乙個int pre,讓每乙個點都能指向上乙個點,這樣輸出的時候就可以順著最後乙個點,依次往前找到途徑的每乙個點了。
#include
#include
using
namespace
std;
int maze[5][5],used[5][5],out[100];
int xc=;
int yc=;
struct node
p[100];
queue
q;void init()
void print(node a)
out[cnt]=0;
for(int i=cnt;i>=0;i--)
}void bfs()
if(now.x<0||now.y<0||now.x>=5||now.y>=5||maze[now.x][now.y]==1||used[now.x][now.y]==1)
else}}
}int main()
}init();
bfs();
}
POJ 3984迷宮問題(BFS廣搜)
題目貼上 相對於求最短路徑長度的題目,這道題目可能稍微難一點點,因為它要求輸出最短的所有路徑點 思路 定義乙個結構體,有此時遍歷點的x,y座標和該點的父親點 意思就是你的上乙個狀態 比如一條路徑是 0,0 1,1 2,2 則點 2,2 的父親點是 1,1 我們將有父親點的點輸出,沒有父親點的點不輸出...
迷宮問題 廣搜
定義乙個二維陣列 int maze 5 5 queue 26 int head 0,tail 0,a 5 5 book 5 5 void function int tail 引數是隊尾 else function queue tail f 如果隊尾的父節點不是0 就將該父節點作為新的隊尾繼續呼叫 這...
迷宮問題(廣搜與深搜)
定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。input 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。output 左上角到右下角的最短路徑,格式如樣例所示。sa...