6262:流感传染
- 总时间限制:
- 1000ms 内存限制:
- 65536kB
- 描述
-
有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。
输入 - 第一行一个数字n,n不超过100,表示有n*n的宿舍房间。 接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。 接下来的一行是一个整数m,m不超过100. 输出
- 输出第m天,得流感的人数 样例输入
-
5....#.#.@..#@..#.........4
样例输出 -
16
1 #include
2 #include 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 else19 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< 过程
....#
.#.@..#@..#......... 2 ...@#.#@@@.#@@.#.@....... 7..@@#
.#@@@.#@@@#@@@...@.. 12.@@@#
.#@@@.#@@@#@@@@.@@@. 16