流感傳染
時間限制: 1000 ms 內存限制: 65536 KB
提交數: 259 通過數: 129
【題目描述】
有一批易感人羣住在網格狀的宿舍區內,宿舍區爲n*n的矩陣,每個格點爲一個房間,房間裏可能住人,也可能空着。在第一天,有些房間裏的人得了流感,以後每天,得流感的人會使其鄰居傳染上流感,(已經得病的不變),空房間不會傳染。請輸出第m天得流感的人數。
【輸入】
第一行一個數字n,n不超過100,表示有n*n的宿舍房間。
接下來的n行,每行n個字符,’.’表示第一天該房間住着健康的人,’#’表示該房間空着,’@’表示第一天該房間住着得流感的人。
接下來的一行是一個整數m,m不超過100。
【輸出】
輸出第m天,得流感的人數。
【輸入樣例】
5 ....# .#.@. .#@.. #.... ..... 4
【輸出樣例】
16
【來源】
【代碼】
#include
#include
int main()
{
int n,m,i,j;
char sickman[101][101];
scanf("%d",&n); //輸入宿舍的大小
for(i = 0; i < n; i++)
scanf("%s", &sickman[i]);//輸入每一行的宿舍情況
scanf("%d",&m);//輸入天數
while(--m > 0) //輸入的數組已經是第一天的情況了,所以這裏要設置爲前自減
{
for( i = 0; i < n; i++)
for( j = 0; j < n; j++)
{
if(sickman[i][j] == '@')//如果這個宿舍是生病的人,則把他上下左右的人標記成*
{
if( i-1 >= 0 && sickman[i-1][j] == '.')
sickman[i-1][j] = '*';
if( i+1 < n && sickman[i+1][j] == '.')
sickman[i+1][j] = '*';
if( j-1 >= 0 && sickman[i][j-1] == '.')
sickman[i][j-1] = '*';
if( j+1 < n && sickman[i][j+1] == '.')
sickman[i][j+1] = '*';
}
}
for( i = 0; i < n; i++)//把標記成*的人變爲@,表示爲被傳染的人
for( j = 0; j < n; j++)
if(sickman[i][j] == '*')
sickman[i][j] = '@';
}
int sum = 0;
for( i = 0; i < n; i++)
for( j = 0; j < n; j++)
if(sickman[i][j] == '@')
++sum;
printf("%d\n",sum);
return 0;
}