經典迷宮問題BFS

2021-06-10 04:49:01 字數 1074 閱讀 5830

給定乙個迷宮,入口為左上角,出口為右下角,問是否有路徑從入口到出口,若有則輸出一條這樣的路徑。注意移動可以從上、下、左、右、上左、上右、下左、下右八個方向進行。迷宮輸入0表示可走,輸入1表示牆。易得可以用1將迷宮圍起來避免邊界問題。

本題採用bfs演算法給出解。注意,利用bfs演算法給出的路徑必然是一條最短路徑。

/*迷宮問題(八方向)

input:

16 8

0 1 1 1 0 1 1 1

1 0 1 0 1 0 1 0

0 1 0 0 1 1 1 1

0 1 1 1 0 0 1 1

1 0 0 1 1 0 0 0

0 1 1 0 0 1 1 0

output:

yes(1,1) (2,2) (3,3) (3,4) (4,5) (4,6) (5,7) (6,8)

*/#include#include#includeusing namespace std;

struct point;

int **maze; //初始化迷宮

point **pre; //儲存任意點在路徑中的前一步

point move[8]=,,,,,,,}; //移動方向,橫豎斜都可以,八個方向

void create(int row,int column)

}}bool mazepath(int row,int column,int x,int y)

if(maze[now.x + move[i].x][now.y + move[i].y] == 0)}}

return false;

}void printpath(int row,int column)

cout<<"(1,1)";

while(!s.empty()){

temp = s.top();

cout<<' '<<'('<>t;

while(t--){

cin>>row>>column;

maze = new int*[row + 2];

pre = new point*[row + 2];

for(int i=0; i

BFS解迷宮問題(經典BFS演算法)

問題描述 下圖給出了乙個迷宮的平面圖,其中標記為 1 的為障礙,標記為 0 的為可 以通行的地方。010000 000100 001001 110000 迷宮的入口為左上角,出口為右下角,在迷宮中,只能從乙個位置走到這 個它的上 下 左 右四個方向之一。對於上面的迷宮,從入口開始,可以按drrurr...

POJ 3984 迷宮問題 經典BFS問題

bfs直接適合用在處理資料較少的的題目,如果資料量太大bfs處理不來。bfs在求解最短路徑或者最短步數上有很多的應用。應用最多的是在走迷宮上。現在這題的主要難點是在記錄上一步的節點,不過這題的資料量比較小,所以不用佇列,用一維陣列就好了。結構體內定義乙個c變數來記錄上一點。struct euq 6 ...

迷宮問題bfs

迷宮問題 採用佇列的廣度優先遍歷 bfs 思想是從乙個頂點v0開始,輻射狀地優先遍歷其周圍較廣的區域 找到的解為最優解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct qutype...