簡單地理解廣度優先搜尋

2021-08-31 21:16:37 字數 1314 閱讀 5411

還是小明找出口的問題,最開始小明在入口(1,1)處,一步可以到達的點有(1,2)和(2,1),如下:

但是出口並不在這兩個點上,那麼小明只能通過(1,2)和(2,1)這兩個點繼續往下走,比如現在小明走到了(1,2)這個點,之後他又能到達那些點呢?有(2,2)再看看通過(2,1)又可以到達哪些點呢?可以到達(2,2)和(3,1),此時也許發現(2,2)這個點既可以從(1,2)到達,也可以從(2,1)到達,並且都只使用了2步,為了防止乙個點多次被走到,這裡需要乙個陣列來記錄乙個點是否已經被走到過。

此時小明2步就可以走到的點就全部走到了,有(2,2)和(3,1),可是小明並不在這兩個點上,沒有別的辦法,還得繼續往下嘗試,在看看通過(2,2)和(3,1)這兩個點還能到達哪些沒有走到過的點。通過(2,2)這個點我們可以到達(2,3)和(3,2),通過(3,1)可以到達(3,2)和(4,1),現在3步可以到達的點有(2,3),(3,2)和(4,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

樣例說明:輸入第乙個數n表示迷宮的行,m表示迷宮的列,接下來n行m列為迷宮,0表示空地,1表示障礙物,最後一行四個數前兩個表示入口,後兩個表示出口,輸出最短的步長。

# include

# include

# include

using namespace std;

struct node

};int main()

}cin>>begin_x>>begin_y;

cin>>end_x>>end_y;

node *re= node(begin_x,begin_y,0,0,0);

s.push(*re);

while(s.empty()==false),,,};

for(int i=0;i<=3;i++)    

}        

}    

}s.pop();

}cout<

return 0;   

}

理解廣度優先搜尋

前段時間遇到了一些與bfs有關的有趣的問題,在一些朋友或者資料的幫助下有所思考,發現這個簡單的演算法如果能應用自如,的確能發揮強大的功效,於是乎寫篇部落格記錄一下。bfs概念很簡單,此處有介紹 bfs實現也很簡單,用乙個queue就可以了 而它確實也是圖中乙個非常重要的演算法,而它確實也可以用來解決...

廣度優先搜尋,簡單bfs

前兩篇文章主要是深度優先搜尋,這次是廣度 寬度 優先搜尋,還是上次的問題現在用bfs來解決,題目 有一天,小哈乙個人去玩迷宮,但是方向感很差的小哈很快就迷路了,小哼得知後,便立即去解救被困的小哈,小哼自然是有備而來,已經弄清楚了迷宮的地圖,現在小哼要以快的速度去解救小哈。問題就此開始了。迷宮由n行和...

廣度優先搜尋BFS(簡單)

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