問題 J 新冠病毒的傳播

2021-10-04 02:53:04 字數 1495 閱讀 4839

題目描述

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

值 0 代表隔離帶。

值 1 代表健康人群。

值 2 代表感染人群。

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

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

輸入

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

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

輸出

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

樣例輸入 copy

3 32 1 1

1 1 0

0 1 1

3 32 1 1

0 1 1

1 0 1

1 20 2

樣例輸出 copy4

-10思路

這是一道bfs題,借鑑了他人的**,琢磨了好幾遍才寫出來,第乙個是佇列不會用,其次是不知道如何增加天數。首先建立乙個結構體,包含二維陣列的下標以及天數,將輸入進來的感染人群壓入佇列,進行bfs。定義乙個臨時的結構體變數賦值為隊首,對它的四個方向進行搜尋,如果發現健康人群則將他壓入佇列,他的天數也就是臨時變數的後一天,然後將他改變為感人人群。

ac**

#include

#include

#include

using

namespace std;

int n,m,ans=0;

int map[

505]

[505];

int dir[4]

[2]=

,,,}

;struct fun;

queue q;

struct funvirus;

void

bfs(

) q.

pop();

for(

int i=

0;i<

4;i++)if

(map[tx]

[ty]==1

)}}return;}

intmain()

}}bfs();

for(

int i=

0;i}printf

("%d\n"

,ans);}

return0;

}

新冠病毒的傳播(bfs)

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

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

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

新冠病毒要回家(次短路)

見了這麼多最短路題,來一道次短路!新冠病毒要回家.題意 n個點,m條邊,求0到n 1的次短路。分析 在最短路的基礎上開乙個dis2陣列記錄次短路長度,當需要更新最短路時,把當前最短路的值賦給次短路,然後再更新最短路的值,另外,當前的值比最短路長且比次短路短時,更新次短路的值。基本 與最短路一致。in...