描述
有一批易感人群住在网格状的宿舍区内,宿舍区为 n*n
的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。
输入
第一行一个数字 n,n 不超过 100,表示有 n*n
的宿舍房间。
接下来的 n 行,每行 n 个字符,’.’ 表示第一天该房间住着健康的人,’#’ 表示该房间空着,’@’ 表示第一天该房间住着得流感的人。
接下来的一行是一个整数 m,m 不超过 100.
输出
输出第m天,得流感的人数
样例输入
5
....#
.#.@.
.#@..
#....
.....
4
样例输出
16
以下为代码
#include<iostream>
using namespace std;
int main(){
int n,m;
char nn[100][100]={};
cin>>n;
for(int i=0;i<n;i++) //输入数组;
for(int j=0;j<n;j++)
cin>>nn[i][j];
cin>>m;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++) // 如果这个数得了流感,并且旁边住着健康的人,把被转染者先替代为*
for(int k=0;k<n;k++){
if(nn[j][k]=='@' && nn[j+1][k]=='.' )
nn[j+1][k]='*';
if(nn[j][k]=='@' && nn[j-1][k]=='.')
nn[j-1][k]='*';
if(nn[j][k]=='@' && nn[j][k+1]=='.')
nn[j][k+1]='*';
if(nn[j][k]=='@' && nn[j][k-1]=='.')
nn[j][k-1]='*';
}
for(int l=0;l<n;l++) //把*换为@
for(int p=0;p<n;p++){
if(nn[l][p]=='*')
nn[l][p]='@';
}
}
int num=0; //计数并输出。
for(int j=0;j<n;j++)
for(int k=0;k<n;k++){
if(nn[j][k]=='@')
num++;
}
cout<< num;
return 0;
}
粗略地看了一眼,j和k都是从0开始的,那
[j-1][k]
和[j][k-1]
不就挂了