1191:流感传染

http://ybt.ssoier.cn:8088/problem_show.php?pid=1191

#include<iostream>
#include<cstdio> 
#include<cstring>
using namespace std;
char mi[110][110];
int  flag[110][110]={0}; //标记数组 
int main()
{
 int a;//a*a矩阵 
 cin>>a;
 for(int i=1;i<=a;i++)//输入 
 {
 	for(int j=1; j<=a; j++)
  		cin>>mi[i][j];
 }
 int m;//第m天 
 cin>>m;
for(int tip=1;tip<=m-1;tip++)//重复m天 
{
  memset(flag,0,sizeof(flag)); //每天都初始化标记数组 
 	for(  int i=1;  i<=a;  i++)
		 for(  int j=1;  j<=a;  j++)
 		    {
				
		 	 if(mi[i][j]=='@' && flag[i][j] != 1)//传染一周 
			 {
			   if(mi[i][j-1] == '.') //某个坐标点的左侧是 行坐标不变,列坐标减1 
			   {
			   	  mi[i][j-1] ='@';
			   	  flag[i][j-1] = 1; //同时标记一下,防止一天当中多次传染 
			   	  
			   } 
			    if(mi[i-1][j] == '.')  //上 
				{
				  mi[i-1][j] ='@';
				  flag[i-1][j]=1; 
				} 
			   if(mi[i][j+1] == '.')// 右 
			   {
			   		mi[i][j+1] ='@';
			   		flag[i][j+1]=1;	
			   } 
			    if(mi[i+1][j] == '.') 
				{	
					mi[i+1][j] ='@';
					flag[i+1][j] =1;
				}
			 }
			
		    }
		    //一天结束了 
}
 int rs=0;//感染人数 
 for(int i=1;  i<=a;  i++)
	 for(int j=1;  j<=a;  j++)
 
  		if(mi[i][j]=='@')
		  {
		   rs++;
		  }
 cout<<rs;
 return 0;
}

/*

第一天:
....#
.#.@.
.#@..
#....
.....

第二天: 
...@#
.#@@@ 
.#@@. 
#.@..
..... 

第三天
..@@#
.#@@@   
.#@@@   
#@@@.
..@.. 

第四天:
.@@@#
.#@@@   
.#@@@   
#@@@@ 
.@@@.

第五天
@@@@#
.#@@@   
.#@@@   
#@@@@ 
@@@@@ 

*/  
发布了5 篇原创文章 · 获赞 5 · 访问量 222

猜你喜欢

转载自blog.csdn.net/weixin_45772263/article/details/103742915
今日推荐