解救人質(BFS)

2021-08-15 18:59:43 字數 1175 閱讀 5084

不同於由遞迴生成的深度優先搜尋,廣度優先搜尋(又叫寬度優先搜尋)使用的是「一層一層」擴充套件的方法。

問題1:解救人質

這裡使用乙個佇列來模擬搜尋的過程

struct note

;struct note que [2501];//地圖大小不超過50*50,因此佇列擴充套件不會超過2500個。

int head,tail;

佇列初始化:
head = tail = 1

;將(1,1)加入佇列

que[tail].x = 1

;que[tail].y = 1

;que[tail].s = 0

;tail++;

首先對(1,1)擴充套件: 擴充套件出(1,2),(2,1)。

(1,1)擴充套件完畢後就沒用了,將它出隊。

head++

;

然後在(1,2),(2,1)的基礎上繼續向下探索。

(1,1)出隊後,佇列的head指到了(1,2),對該點擴充套件:(2,2)入隊。

(1,2)擴充套件完,沒用了,出隊。

head值到(2,1),對該點擴充套件:(2,2),(3,1)因為(2,2)已經在佇列中,所以只需要將(3,1)入隊。

輸入:

5 4

0 0 1 0

0 0 0 0

0 0 1 0

0 1 0 0

0 0 0 1

1 1 4 3

輸出:

7

#include 

typedef struct

note;

note que[2501];

intnext[4][2] = ,,,};

int a[51][51],book[51][51];

int main()

if(nx == endx && ny == endy)

}if(flag == 1)

break;

head++;

}printf("%d\n",que[tail-1].s);

return

0;}

問題2:寶島探險

給了地圖,從(6,8)開始,地圖上不為0的為陸地,求陸地面積

從(6,8)開始搜尋,寬搜,不為0的加入佇列即可。

解救人質 BFS模板(迷宮問題)

和上個dfs的問題一樣,這次用bfs的思想,bfs沒有像dfs那樣專門有個step累加,是靠佇列思想實現,更像一群路徑競速,最快的到達後,就break輸出了 include struct node int main int book 51 51 定義乙個用於表示走的方向的陣列 int next 4 ...

解救小哈 BFS演算法舉例

有一天,小哈乙個人去玩迷宮。但是方向感不好的小哈很快就迷路了。小哼得知後便去解救無助的小哈。此時的小哼已經弄清楚了迷宮的地圖,現在小哼要以最快的速度去解救小哈。那麼,問題來了.輸入5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 4 3 輸出輸入 3 3...

啊哈演算法 bfs 解救小哈

include struct note 定義乙個結構體佇列 int main book 51 51 a陣列存地圖,book標記那個點走過 int next 4 2 定義的方向 int head,tail 標記頭和尾 int i,j,k,n,m,startx,starty,endx,endy,tx,t...