廣度優先搜尋,簡單bfs

2021-10-02 22:01:23 字數 1318 閱讀 4730

前兩篇文章主要是深度優先搜尋,這次是廣度(寬度)優先搜尋,還是上次的問題現在用bfs來解決,題目:

有一天,小哈乙個人去玩迷宮,但是方向感很差的小哈很快就迷路了,小哼得知後,便立即去解救被困的小哈,小哼自然是有備而來,已經弄清楚了迷宮的地圖,現在小哼要以快的速度去解救小哈。問題就此開始了。。。。

迷宮由n行和m列單元格組成(m和n都小於等於50),每個單元格要麼是空地要麼是障礙物。你的任務是幫助小哼找到一條從迷宮的起點通往小哈所在位置的最短路徑。注意障礙物是不能走的,當然小哼也是不能走到迷宮之外。

bfs演算法是讓小哼往乙個方向走,直到走不通再回來,而深度優先搜尋是通過遞迴一層一層的來找到物件。

發現乙個點就把這個點放到佇列之中,直到走到小哈的位置。

**:

#include

struct note

;int

main()

,book[51]

[51]=

;//定義乙個陣列,用來表示方向

int next[4]

[2]=

,//想右走

,//向下走

,//xiang左走

;//向上走

int head,tail;

int i,j,k,n,m,startx,starty,p,q,tx,ty,flag;

scanf

("%d %d %d %d"

,&startx,

&starty,

&p,&q)

;//佇列初始化

head=1;

tail=1;

//網佇列插入迷宮列表

que[tail]

.x=startx;

que[tail]

.y=starty;

que[tail]

.f=0

; que[tail]

.s=0

; tail++

; book[startx]

[starty]=1

; flag=0;

//用來標記是否到達目標點,0表示暫時未到達,1表示到達;

//佇列不為空的時候迴圈

while(head//如果到目標點了,停止擴充套件,結束任務,退出迴圈

if(tx==p && ty==q)}if

(flag==1)

break

; head++;}

}printf

("%d"

,que[tail-1]

.s);

getchar()

;getchar()

;return0;

}

廣度優先搜尋BFS(簡單)

都做過倒水的問題,有乙個3公升和5公升的水桶和無限的水,現在要求桶中恰好裝入4公升水。poj3414就是這類的倒水問題,給你兩個桶,容量為a,b。現在要求稱出c公升水。1 a,b 100,c max a,b 並且要使操作次數最少,列印最少次數和操作。操作次數最少,顯然是廣度優先搜尋可以快速達到要求。...

BFS廣度優先搜尋

廣度優先搜尋,利用佇列實現,結束標誌是隊列為空的時候 承接dfs的演算法實現的講例,對於迷宮問題我們也可以採取廣度優先搜尋實現 include iostream include cstdio include cstdlib using namespace std int map 55 55 int ...

bfs廣度優先搜尋

這一課我們來學習圖的另一種遍歷方法 廣度優先搜尋 breadth first search,簡稱 bfs 這是一種連通圖的常用遍歷策略,通常用於求起點到各點的最短路徑,以及求兩點之間的最優路徑等問題。首先我們先來看看廣度優先搜尋的具體方法吧 對於乙個連通圖,我們假設一開始所有頂點均未被訪問,廣度優先...