虽然代码有些过于冗杂,不过应该跑得出来 样例过了,输出中间变量后也没问题
代码确实比较费力,但是为什么不过呢(应该是正确的)?
#include<bits/stdc++.h>
using namespace std;
struct b//病人结构体,存储xy
{
int x,y;
}
ill[1000][1000];//病人[i][j]表示第i天的第j个病人
char s[105][105];//宿舍地图
int is=1;int n;//is表示病人数
void day(int _day)
{
int dis=1;//今天感染了几个病人
for(int i=1;i<=is;i++)//枚举今天的病人(新增的)
{
if(s[ill[_day][i].x+1][ill[_day][i].y]=='.')//上下左右四个方向是否能被感染
{
s[ill[_day][i].x+1][ill[_day][i].y]='@';//ill[_day][i]表示今天(昨天新增的)的第i个病人,.x表示横轴,+1表示上方,下同理
ill[_day+1][dis].x=ill[_day][i].x+1;//存储新病人位置
ill[_day+1][dis++].y=ill[_day][i].y;//ill[_day+1][dis]表示今天新增(明天传染别人的)第dis个病人,.x .y表示位置,下同理
}
if(s[ill[_day][i].x-1][ill[_day][i].y]=='.')
{
s[ill[_day][i].x-1][ill[_day][i].y]='@';
ill[_day+1][dis].x=ill[_day][i].x-1;
ill[_day+1][dis++].y=ill[_day][i].y;
}
if(s[ill[_day][i].x][ill[_day][i].y+1]=='.')
{
s[ill[_day][i].x][ill[_day][i].y+1]='@';
ill[_day+1][dis].x=ill[_day][i].x;
ill[_day+1][dis++].y=ill[_day][i].y+1;
}
if(s[ill[_day][i].x][ill[_day][i].y-1]=='.')
{
s[ill[_day][i].x][ill[_day][i].y-1]='@';
ill[_day+1][dis].x=ill[_day][i].x;
ill[_day+1][dis++].y=ill[_day][i].y-1;
}//以上同理
}
/* for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<s[i][j]<<" ";
}
cout<<endl;
}
cout<<"--------------"<<endl;*///输出检查
is=dis;//传递病人数
}
int main()
{
cin>>n;
int m;
for(int i=1;i<=n;i++)//读入
{
for(int j=1;j<=n;j++)
{
cin>>s[i][j];
if(s[i][j]=='@')
{
ill[2][is].x=i;ill[2][is++].y=j;//存储病人xy
}
}
}
cin>>m;
for(int i=2;i<=m;i++)
{
day(i);
}//模拟2-m天
int sum;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(s[i][j]=='@')
{
sum++;
}
}
}//求有多少病人(@)
cout<<sum;
}