C++信息学奥赛1191

#include <iostream>
using namespace std;

int main()
{
	int n,m,count=0;
	
	cin >> n;
	// n*n矩阵,向四周传染,为避免越界,创建数组时四周各向外扩一行
	char x[n+2][n+2];
	
	// 数据只填充在内部的n行、列中,最外围只为了避免越界
	for(int i=1;i<n+1;i++)
	{
		for(int j=1;j<n+1;j++) cin >> x[i][j];
	}
	
	cin >> m;
	
	// m天后,实际应该传染了m-1天
	for(int i=0;i<m-1;i++)
	{
		// 将得流感人员(@)周边的入住人员标记为被感染(!)
		// 先标记,不直接设定为传染人员@,不然会导致后面的遍历出错
		for(int i=1;i<n+1;i++)
		{
			for(int j=1;j<n+1;j++)
			{
				if(x[i][j]=='@')
				{
					if(x[i-1][j]=='.') x[i-1][j]='!';
					if(x[i][j-1]=='.') x[i][j-1]='!';
					if(x[i][j+1]=='.') x[i][j+1]='!';
					if(x[i+1][j]=='.') x[i+1][j]='!';
				}
			}
		}
		// 更新情况,将被感染人员标记为得流感人员@
		for(int i=1;i<n+1;i++)
		{
			for(int j=1;j<n+1;j++)
			{
				if(x[i][j]=='!') x[i][j]='@';
			}
		}
	}
	
	// 统计结果
	for(int i=1;i<n+1;i++)
		for(int j=1;j<n+1;j++)
			if(x[i][j]=='@') count++;
	
	cout << count;
}

  

posted @ 2024-09-10 15:41  我信你个鬼!  阅读(24)  评论(0)    收藏  举报