BFS寬度優先搜尋 新冠病毒的傳播

2021-10-03 16:07:34 字數 1539 閱讀 9829

應該是我部落格的第一篇廣度優先搜尋的演算法了吧,之前題目都用的dfs,因為dfs確實比較熟練點,bfs雖然很久之前就知道他是怎麼實現的但是沒怎麼自己真正實踐過~~~而且以前一聽佇列就頭大,不過最近這方面需求還挺大的-.-

文章首發

寬度優先搜尋

(breadth first search)

寬度優先搜尋演算法(又稱廣度優先搜尋)是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。

在這裡提供乙個模板

迷宮題型

void bfs()

if(如果能走)}}

}

推薦

正月點燈籠:bfs講解

來道例題

最近新冠病毒疫情非常嚴重,由於我們國家採取了有力的措施,才沒有使疫情進一步的擴大。今天,作為計算機專業的學生,我們來用程式模擬一下各種情況下的新冠病毒傳播情況。現在給定乙個n * m的網格,每個網格可以有以下三個值之一:

值 0 代表隔離帶。

值 1 代表健康人群。

值 2 代表感染人群。

每天,任何與感染人群(在 4 個正方向上)相鄰的健康人都會感染。如果遇到隔離帶,病毒就會被阻斷。

輸出直到單元格中沒有健康人為止所必須經過的最小天數。如果不可能所有人都被感染,輸出 -1。

測試資料由多組測試樣例組成。第一行輸入兩個正整數 n ( 1 <= n <= 500 ) 和 m ( 1 <= m <= 500 ),

接下來輸入n * m個數字,數字均由 0 , 1 ,2構成

每組測試樣例,輸出直到單元格中沒有健康人為止所必須經過的最小天數。如果不可能,輸出 -1。

3 3

2 1 1

1 1 0

0 1 1

3 32 1 1

0 1 1

1 0 1

1 20 2

4

-10

#includeusing namespace std;

int dir[4][2]=;

int map[1000][1000];

int qx;

int qy;

int n,m,sum;

struct fungreat;

queueq;

void bfs()

if(map[xx][yy]!=0&&map[xx][yy]!=2)

} }}int main()

}} sum=0;

bfs();

for(int i=0;i}

} printf("%d\n",sum);

} return 0;

}

新冠病毒的傳播(bfs)

題目描述 最近新冠病毒疫情非常嚴重,由於我們國家採取了有力的措施,才沒有使疫情進一步的擴大。今天,作為計算機專業的學生,我們來用程式模擬一下各種情況下的新冠病毒傳播情況。現在給定乙個n m的網格,每個網格可以有以下三個值之一 每天,任何與感染人群 在 4 個正方向上 相鄰的健康人都會感染。如果遇到隔...

寬度優先搜尋BFS

寬度優先搜尋 bfs,breadth first search 也是搜尋的手段之一。它與深度優先搜尋類似,從某個狀態出發探索所有可以到達的狀態。與深度優先搜尋的不同之處在於搜尋的順序,寬度優先搜尋總是先搜尋距離初始狀態近的狀態。也就是說,它是按照開始狀態 只需1次轉移就可以到達的所有狀態 只需2次轉...

寬度優先搜尋(BFS)

bfs,其英文全稱是breadth first search。0 1 4 2 3思路 從圖中某個節點出發,將該結點入隊,標記為已訪問。然後輸出佇列的隊首 第一次為起點 將隊首從佇列中刪除,訪問該結點的鄰接表,將未標記的相鄰結點入隊,並且標記為已訪問。接下來迴圈操作第二句話。按照上邊的圖,假設出發點為...