总时间限制: 1000ms 内存限制: 65536kB描述
有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。
输入第一行一个数字n,n不超过100,表示有n*n的宿舍房间。 接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。 接下来的一行是一个整数m,m不超过100.输出输出第m天,得流感的人数样例输入
5
....#
.#.@.
.#@..
#....
.....
4
样例输出
16
1 #include<cstring>
2 #include<iostream>
3 using namespace std;
4 int n,t,ans;
5 int a[110][110];
6 bool b[110][110];
7 char d[110][110];
8 int main() {
9 cin>>n;
10 for(int i=1; i<=n; i++)
11 for(int j=1; j<=n; j++)
12 {
13 cin>>d[i][j];
14 if(d[i][j]=='.')
15 a[i][j]=1;
16 else if(d[i][j]=='@')
17 a[i][j]=0;
18 else
19 a[i][j]=-1;//1表示健康,0表示患病 ,-1表示无人
20 }
21 cin>>t;
22 for(int k=2; k<=t; k++)
23 {
24 memset(b,true,sizeof(b));
25 for(int i=1; i<=n; i++)
26 for(int j=1; j<=n; j++)
27 {
28 if(a[i][j]==0&&b[i][j]==true)
29 {
30 if(a[i-1][j]==1 )
31 {
32 a[i-1][j]=0;
33 b[i-1][j]=false;
34 }
35 if(a[i+1][j]==1 )
36 {
37 a[1+i][j]=0;
38 b[i+1][j]=false;
39 }
40 if(a[i][j-1]==1 )
41 {
42 a[i][j-1]=0;
43 b[i][j-1]=false;
44 }
45 if(a[i][j+1]==1 )
46 {
47 a[i][j+1]=0;
48 b[i][j+1]=false;
49 }
50 }
51 }
52 }
53 for(int i=1; i<=n; i++)
54 for(int j=1; j<=n; j++)
55 if(a[i][j]==0)
56 ans++;
57 cout<<ans;
58 return 0;
59 }
过程
....# .#.@. .#@.. #.... ..... 2
...@# .#@@@ .#@@. #.@.. ..... 7
..@@# .#@@@ .#@@@ #@@@. ..@.. 12
.@@@# .#@@@ .#@@@ #@@@@ .@@@. 16