此題做題思路:這個題考查模擬矩陣的搜尋過程。用字元二維陣列存放網格狀的宿舍區,用
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並且輸入m=2表示觀察一下經過第二天感染後病毒人數是多少,發現感染數顯然不對,原因是使用雙重迴圈遍歷房間時,如呼叫gr函式去感染第i行時,其實第i+1行也被感染,再去感染第i+1行時就包含了同一天已被感染的人。所以我這兒用另外乙個陣列aa將當前感染立馬儲存,便 有了如下**:for(int i=1; i<=n; i++)
2
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的宿舍房間。接...