廣搜bfs 迷宮問題 三S

2021-08-15 14:52:49 字數 1137 閱讀 9186

定義乙個二維陣列:

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...