最近,某个疾病非常严重,具有很强的传染性,为了研究这种传染病,蜗蜗建立一个传染病模型。有 n×n 个人站在一起形成一个方阵,最开始有某几个人患病了,由于这个传染病非常狡猾,所以没有人能发现有人染病。通过研究发现,如果一个人的上下左右某个位置出现了一个患病的人,那么第二天这个人也会患病。现在让你帮蜗蜗计算一下,第 m 天之后总共有多少人感染这个疾病,注意,在这些天中,这些人都会站在原来的位置不动,不会改变位置。
数据输入 第一行两个整数 n,m,表示有 n×n 个人站在一起,模型一共经历 m 天。
接下来 n 行,每行 n 个整数,1 代表这个位置的人患病了,0 代表是健康的,整数之间用一个空格隔开。
数据输出
一个整数,表示 m 天之后,共有多少人得过这种病。
3 1
1 1 0
0 0 0
0 0 0
5
一天之后:
1 1 1
1 1 0
0 0 0
数据规模 保证1≤m≤n≤100。
代码只得了50分,请大神指出错误!
#include <bits/stdc++.h>
using namespace std;
const int MAX = 102;
int n,date,cnt;
int a[MAX+1][MAX+1], will[MAX+1][MAX+1];
int main() {
scanf("%d%d",&n,&date);
if (n ==67) return 1;
for (int i=1;i<=n;i++) {
for (int j=1;j<=n;j++) {
scanf("%d",a[i]+j);
}
}
// 把a数组开大 省去特判
while (date--) {
// 模拟传染
for (int i=1;i<=n;i++) {
for (int j=1;j<=n;j++) {
if (a[i][j]) {
will[i][j] = 0;
continue;
}
if (will[i][j]) {
a[i][j] = 1;
will[i][j] = 0;
}
if (j!=1 && a[i][j-1])
will[i][j] = 1;
if (j!=n && a[i][j+1])
will[i][j] = 1;
if (i!=1 && a[i-1][j])
will[i][j] = 1;
if (i!=n && a[i+1][j])
will[i][j] = 1;
}
}
}
for (int i=1;i<=n;i++) {
for (int j = 1; j <= n; j++) {
if (will[i][j])
a[i][j] = 1;
}
}
for (int i=1;i<=n;i++) {
for (int j=1;j<=n;j++) {
if (a[i][j])
++cnt;
}
}
printf("%d",cnt);
return 0;
}