【递推】【入门】流感传染

题目描述

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

输入

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

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

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

输出

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

样例输入

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

样例输出

16
#include 
using namespace std;
#define N 105
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
int main(){
    char mp[N][N], t[N][N];
    int n,m,ct=0;
    cin>>n;
    for(int i=1; i<=n;++i)
        for(int j=1;j<=n;++j)
            cin>>mp[i][j];
    cin>>m;
    for(int k=2;k<=m;++k){
        memset(t,0,sizeof(t)); 
        for(int i=1;i<=n;++i)
            for(int j = 1; j <= n; ++j){
                t[i][j]=mp[i][j];
                if(mp[i][j]=='.'){
                    for(int l=0;l<4;++l){
                        int x=i+dir[l][0],y=j+dir[l][1];
                        if(x>=1&&x<=n&&y>=1&&y<=n&&mp[x][y]=='@') 
                            t[i][j]='@';
                    }
                }
            }memcpy(mp,t,sizeof(t)); 
    }for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            if(mp[i][j]=='@')
                ct++;
    cout<

你可能感兴趣的:(算法,c++,新手村虐菜)