#182-[模拟]流感传染

版权声明:反正也没有人会转,下一个 https://blog.csdn.net/drtlstf/article/details/84885818

Description

Input

Output

5
....#
.#.@.
.#@..
#....
.....
4
  • Sample Input

16
  • Sample Output

HINT

对于50% 的数据,1<=n<=50,1<=m<= 5
• 对于100% 的数据,1<=n<=100,1<=m<=100

直接模拟没问题

#include <iostream>
#include <cstdio>

#define SIZE 101

using namespace std;

char a[SIZE][SIZE];
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

bool check(int x, int y) // 能否被传染?
{
	int i;
	
	for (i = 0; i < 4; ++i)
	{
		if (a[x+dx[i]][y+dy[i]] == '@') // 什么?周围有病源?
		{
			return true; // 感染
		}
	}
	
	return false; // 幸存!
}

int main(void)
{
	int n, m, i, j, res = 0;
	
	scanf("%d", &n);
	for (i = 1; i <= n; ++i)
	{
		for (j = 1; j <= n; ++j)
		{
			cin >> a[i][j];
		}
	}
	scanf("%d", &m);
	
	while (--m) // 输入的是第1天的情况,所以应该传染K-1次
	{
		for (i = 1; i <= n; ++i)
		{
			for (j = 1; j <= n; ++j)
			{
				if (a[i][j] == '.') // 确保是有人的房间
				{
					if (check(i, j)) // 能感染
					{
						a[i][j] = '%'; // 先暂时替换!
					}
				}
			}
		}
		for (i = 1; i <= n; ++i)
		{
			for (j = 1; j <= n; ++j)
			{
				if (a[i][j] == '%') // 被替换的都换回病人了
				{
					a[i][j] = '@';
				}
			}
		}
	}
	for (i = 1; i <= n; ++i) // 统计病人个数
	{
		for (j = 1; j <= n; ++j)
		{
			if (a[i][j] == '@')
			{
				++res;
			}
		}
	}
	
	printf("%d", res);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/drtlstf/article/details/84885818
今日推荐