流感传染
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。
输入
-
第一行一个数字n,n不超过100,表示有n*n的宿舍房间。
接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。
接下来的一行是一个整数m,m不超过100.
输出
- 输出第m天,得流感的人数 样例输入
-
5 ....# .#.@. .#@.. #.... ..... 4
样例输出
-
16
-
#include<stdio.h> #include<string.h> int b[100][100]; //标记是否被感染 void f(char a[][100],int n){ //感染周围的标记 int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(a[i][j]=='@'&&b[i][j]==1){ if(i-1>=0&&a[i-1][j]=='.'){ a[i-1][j]='@'; } if(i+1<n&&a[i+1][j]=='.'){ a[i+1][j]='@'; } if(j-1>=0&&a[i][j-1]=='.'){ a[i][j-1]='@'; } if(j+1<n&&a[i][j+1]=='.'){ a[i][j+1]='@'; } } } } } int main(){ char a[100][100]; char str[101]; int n,i,j,m,count=0; scanf("%d",&n); getchar(); memset(b,0,sizeof(int)); for(i=0;i<n;i++){ gets(str); for(j=0;j<n;j++){ a[i][j]=str[j]; if(a[i][j]=='@'){ b[i][j]=1; } } } scanf("%d",&m); m=m-1; while(m--){ f(a,n); for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(a[i][j]=='@'&&b[i][j]==0){ //没走过一天,新感染上的标记为1,进行下一天的感染 b[i][j]=1; } } } } for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(a[i][j]=='@'){ count++; } } } printf("%d",count); return 0; }