流感传染(信息学奥赛一本通-T1191)
生活随笔
收集整理的這篇文章主要介紹了
流感传染(信息学奥赛一本通-T1191)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
有一批易感人群住在網格狀的宿舍區內,宿舍區為n*n的矩陣,每個格點為一個房間,房間里可能住人,也可能空著。在第一天,有些房間里的人得了流感,以后每天,得流感的人會使其鄰居傳染上流感,(已經得病的不變),空房間不會傳染。請輸出第m天得流感的人數。
【輸入】
第一行一個數字n,n不超過100,表示有n*n的宿舍房間。
接下來的n行,每行n個字符,’.’表示第一天該房間住著健康的人,’#’表示該房間空著,’@’表示第一天該房間住著得流感的人。
接下來的一行是一個整數m,m不超過100。
【輸出】
輸出第m天,得流感的人數。
【輸入樣例】
5
....#
.#.@.
.#@..
#....
.....
4
【輸出樣例】
16
【源程序】
#include<iostream> #include<cstring> using namespace std; char s[110]; int a[110][110]; struct node{int r;//r行int c;//c列int d;//d天 }q[10100]; int nextt[][2]={{-1,0},{1,0},{0,-1},{0,1}}; int main() {int n,m;int h=1,t=1;int r,c,d;int nr,nc,cnt=0;int i,j;cin>>n;for(i=0;i<n;i++){cin>>s;for(j=0;j<n;j++)if(s[j]=='.')a[i][j]=0;else if(s[j]=='@'){a[i][j]=1;q[t].r=i;q[t].c=j;q[t].d=1;t++;}else if(s[j]=='#')a[i][j]=2;}cin>>m;while(h<t){r=q[h].r;c=q[h].c;d=q[h].d;if(d==m)break;for(i=0;i<4;i++){nr=r+nextt[i][0];nc=c+nextt[i][1];if(a[nr][nc]==0&&0<=nr&&nr<n&&0<=nc&&nc<n){q[t].r=nr;q[t].c=nc;q[t].d=d+1;a[nr][nc]=1;t++;}}h++;}for(i=0;i<n;i++)for(j=0;j<n;j++)if(a[i][j]==1)cnt++;cout<<cnt<<endl;return 0; }?
總結
以上是生活随笔為你收集整理的流感传染(信息学奥赛一本通-T1191)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基础算法 —— 递归算法
- 下一篇: 字符串匹配问题(信息学奥赛一本通-T13