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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM