1191 流感傳染

2022-06-02 03:12:08 字數 1494 閱讀 1072

此題做題思路:這個題考查模擬矩陣的搜尋過程。用字元二維陣列存放網格狀的宿舍區,用

int next[4][4]=,,,};
來模擬感染四個方向。於是大概5m後出現如下**:

#includeusing

namespace

std;

char a[101][101

];int n, m, cnt=0

;int next[4][4]=,,,};//四個方向感染

void gr(int x, int

y)//該函式為感染函式

}}int

main()

cin>>m;

for(int k=2; k<=m; k++)

}

cout

return0;

}

結果執行如下:

樣例顯然不對,發生了什麼事情?為了查出錯誤在什麼地方,在第37行之後增加如下**

1

for(int i=1; i<=n; i++)

2

並且輸入m=2表示觀察一下經過第二天感染後病毒人數是多少,發現感染數顯然不對,原因是使用雙重迴圈遍歷房間時,如呼叫gr函式去感染第i行時,其實第i+1行也被感染,再去感染第i+1行時就包含了同一天已被感染的人。所以我這兒用另外乙個陣列aa將當前感染立馬儲存,便 有了如下**:

1 #include2

using

namespace

std;

3char a[101][101], aa[101][101

];//a陣列用於存放上一天的感染情況,aa陣列用於存放當天被感染情況。

4int n, m, cnt=0;5

int next[4][4]=,,,};

6void gr(int x, inty)7

17}18}

19int

main()

20

28 cin>>m;

29for(int k=2; k<=m; k++)

3036

for(int i=1; i<=n; i++)//把當天感染結果再賦值給了a陣列

37for(int j=1; j<=n; j++)

38 a[i][j]=aa[i][j];

3940}41

for(int i=1; i<=n; i++)

42for(int j=1; j<=n; j++)

43if(a[i][j]=='

@')cnt++;

4445 cout

46return0;

47 }

**是長了點,但還是容易理解的!這個題關鍵是搞清楚陣列儲存已被感染和待被感染,以及他們之間的關係,其實還是包含最簡單的遞推思想的!

1191 流感傳染

時間限制 1000 ms 記憶體限制 65536 kb 提交數 4961 通過數 2667 有一批易感人群住在網格狀的宿舍區內,宿舍區為n n的矩陣,每個格點為乙個房間,房間裡可能住人,也可能空著。在第一天,有些房間裡的人得了流感,以後每天,得流感的人會使其鄰居傳染上流感,已經得病的不變 空房間不會...

1191 流感傳染

題目描述 有一批易感人群住在網格狀的宿舍區內,宿舍區為n n的矩陣,每個格點為乙個房間,房間裡可能住人,也可能空著。在第一天,有些房間裡的人得了流感,以後每天,得流感的人會使其鄰居傳染上流感,已經得病的不變 空房間不會傳染。請輸出第m天得流感的人數。輸入 第一行乙個數字n,n不超過100,表示有n ...

遞推演算法 流感傳染(1191)

有一批易感人群住在網格狀的宿舍區內,宿舍區為n n的矩陣,每個格點為乙個房間,房間裡可能住人,也可能空著。在第一天,有些房間裡的人得了流感,以後每天,得流感的人會使其鄰居傳染上流感,已經得病的不變 空房間不會傳染。請輸出第m天得流感的人數。第一行乙個數字n,n不超過100,表示有n n的宿舍房間。接...