POJ C程序设计进阶 编程题#6:流感传染

编程题#6:流感传染

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 1000ms 内存限制: 65536kB

描述

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

输入

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

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

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

输出

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

样例输入

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

样例输出

16


思路:每天将标记的人感染,并标记第二天将要感染的人标记


 1 #include<iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     char a[101][101];
 8     int n, m, sum = 0;
 9     cin >> n;
10     for(int i = 0;i < n; i++)
11     {
12         for(int j = 0; j < n; j++)
13         {
14              cin >> a[i][j];
15         }
16     }
17     cin >> m;
18     for(int d = 1; d <= m; d++)
19     {
20         for(int i = 0; i < n; i++)
21         {
22              for(int j = 0; j < n;j++)
23              {
24                  if(a[i][j] == '!')
25                    a[i][j] = '@'; // 将前一天标记的人感染
26              }
27         }
28         for(int i = 0; i < n; i++)
29         {
30             for(int j = 0; j < n;j++)
31             {
33 // 将感染人周围的人标记
32 if(a[i][j] == '@') 33 { 34 if(i + 1 <n && a[i + 1][j] == '.') 35 a[i + 1][j]='!'; 36 if(j - 1 >= 0 && a[i][j - 1] == '.') 37 a[i][j - 1] = '!'; 38 if(j + 1 < n && a[i][j + 1] == '.') 39 a[i][j + 1]='!'; 40 if(i - 1 >= 0 && a[i - 1][j] == '.') 41 a[i - 1][j] = '!'; 42 } 43 } 44 } 45 46 } 47 for(int i = 0; i < n; i++) 48 { 49 for(int j = 0; j < n; j++) 50 { 51 if(a[i][j] == '@') 52 sum++; 53 } 54 } 55 cout << sum << endl; 56 return 0; 57 }

 

posted @ 2015-08-06 22:07  dagon  阅读(4110)  评论(0编辑  收藏  举报