流感傳染

流感傳染


時間限制: 1000 ms         內存限制: 65536 KB
提交數: 259     通過數: 129 

【題目描述】

有一批易感人羣住在網格狀的宿舍區內,宿舍區爲n*n的矩陣,每個格點爲一個房間,房間裏可能住人,也可能空着。在第一天,有些房間裏的人得了流感,以後每天,得流感的人會使其鄰居傳染上流感,(已經得病的不變),空房間不會傳染。請輸出第m天得流感的人數。

【輸入】

第一行一個數字n,n不超過100,表示有n*n的宿舍房間。

接下來的n行,每行n個字符,’.’表示第一天該房間住着健康的人,’#’表示該房間空着,’@’表示第一天該房間住着得流感的人。

接下來的一行是一個整數m,m不超過100。

【輸出】

輸出第m天,得流感的人數。

【輸入樣例】

5
....#
.#.@.
.#@..
#....
.....
4

【輸出樣例】

16

【來源】


No

【代碼】

#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;
}

【說明】

dev-c++運行成功,提交通過


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章