编程题#6:流感传染

描述

有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。

 

输入

第一行一个数字n,n不超过100,表示有n*n的宿舍房间。

接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。

接下来的一行是一个整数m,m不超过100.

 

输出

输出第m天,得流感的人数

 

#include <iostream>
using namespace std;

int main() {
    int a[100][100], n, m;
    char c;
    cin >> n;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) {
        cin >> c;
        if (c == '.') a[i][j] = 1;
        else if (c == '#') a[i][j] = 0;
        else if (c == '@') a[i][j] = 2;    
        }
    cin >> m;
    while (m--) {
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++) {
                if (a[i][j] == 2) {
                    if ((i-1 >= 0) && a[i-1][j] == 1) a[i-1][j] = 3;
                    else if ((i+1 <= n-1) && a[i+1][j] == 1) a[i+1][j] = 3;
                    else if ((j-1 >= 0) && a[i][j-1] == 1) a[i][j-1] = 3;
                    else if ((j+1 <= n-1) && a[i][j+1] == 1) a[i][j+1] = 3;
                
                }
            }
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++) {
                if (a[i][j] == 3) 
                    a[i][j] = 2; 
        }
    }
    int count = 0;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) {
            if (a[i][j] == 2) 
                count++;
        }
    cout << count << endl;
    return 0;
} 

 

posted on 2017-10-26 13:14  平行线不会相交  阅读(416)  评论(0)    收藏  举报

导航