T1191:流感传染

【题目描述】

有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。

【输入】

第一行一个数字n,n不超过100,表示有n*n的宿舍房间。

接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。

接下来的一行是一个整数m,m不超过100。

【输出】

输出第m天,得流感的人数。

【输入样例】

5 
....# 
.#.@.
.#@.. 
#.... 
..... 
4

【输出样例】

16

解题思路:

这道题分类在递推里面,但是我找半天,直接暴力出来了...

AC代码:

#include<iostream>
using namespace std;
struct node{
	char c;
	int flag = 0;	
}a[110][110];
struct point{
	int x, y;
}p[4] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; 
int main(){
	int n, m, cnt = 0, cnt1 = 0;
	cin >> n;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			cin >> a[i][j].c;
			if(a[i][j].c == '@')	a[i][j].flag = 1;
		}
	}
	cin >> m;
	m--;
	while(m--){
		for(int i = 1; i <= n; i++){
			for(int j = 1; j <= n; j++){
				if(a[i][j].c == '@' && a[i][j].flag){
					for(int k = 0; k < 4; k++){
						if(a[i + p[k].x][j + p[k].y].c == '#')	continue;
						a[i + p[k].x][j + p[k].y].c = '@';
					}		
				}
			}
		}
		for(int i = 1; i <= n; i++){
			for(int j = 1; j <= n; j++){
				if(a[i][j].c == '@' && !a[i][j].flag){
						a[i][j].flag = 1;		
				}
			}
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j<= n; j++){
			if(a[i][j].c == '@')	cnt++;
		}
	}
	cout << cnt << endl;
	return 0;
}

注意点:

  1. 对于每一个点,设置一个flag变量,往后好判断;

猜你喜欢

转载自blog.csdn.net/weixin_42522886/article/details/89183826
今日推荐