迷宮問題(廣度優先搜尋BFS

2021-07-08 15:26:50 字數 1334 閱讀 9827

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

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

[cpp]view plain

copy

/*迷宮問題(八方向)

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

#include

using

namespace

std;  

struct

point;  

int**maze;     

//初始化迷宮

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

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

void

create(

introw,

intcolumn)  

}  }  

bool

mazepath(

introw,

intcolumn,

intx,

inty)  

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

}  }  

return

false

;  }  

void

printpath(

introw,

intcolumn)  

cout<<"(1,1)"

;  while

(!s.empty())  

cout<}  

intmain()  

create(row,column);  

if(mazepath(row,column,1,1))  

else

cout<<

"no"

<

}  return

0;  

}  

迷宮問題 BFS(廣度優先搜尋)

之前寫迷宮問題用的都是遞迴求解,採用的是dfs深度優先搜尋,從來沒有想到過用廣度優先搜尋,這次碰到了乙個迷宮題,之前的dfs不太合適。題目鏈結點此 假設乙個探險家被困在了地底的迷宮之中,要從當前位置開始找到一條通往迷宮出口的路徑。迷宮可以用乙個二維矩陣組成,有的部分是牆,有的部分是路。迷宮之中有的路...

迷宮 BFS 廣度優先搜尋

小c最近在研究機械人,他想看看自己的機械人夠不夠智慧型,於是他將機械人放在乙個n m的迷宮中,看看機械人能不能在最短的時間內到達目的地,可是小c不知道最短的時間是多少,現在請你幫他算算機械人到達目的地的最短時間是多少?輸入描述 輸入資料第一行兩個整數n和m。n和m的範圍 10,500 接下來n行,每...

迷宮問題 (bfs廣度優先搜尋記錄路徑)

定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。input 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。output 左上角到右下角的最短路徑,格式如樣例所示。sa...