jianxing • 3个月前
这题教材给的答案有误,正确解法应该是BFS 只能说毒教材真害人 `#include<bits/stdc++.h> using namespace std; int n,s,ans; char Map[109][109]; int dx[4]={-1,0,0,1}; int dy[4]={0,-1,1,0}; struct Info {
int x,y,t;
}; int Judge(int x,int y) {
return x>=1&&x<=n&&y>=1&&y<=n&&Map[x][y]=='*';
} int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
queue<Info> q;
cin>>n;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
cin>>Map[i][j];
if (Map[i][j]=='@')
{
q.push((Info){i,j,0});
}
}
}
cin>>s;
while(!q.empty()&&q.front().t<s)
{
Info Nex,Cur=q.front();
q.pop();
for (int i=0;i<4;i++)
{
Nex.t=Cur.t+1;
Nex.x=Cur.x+dx[i];
Nex.y=Cur.y+dy[i];
if (Judge(Nex.x,Nex.y))
{
Map[Nex.x][Nex.y]='@';
q.push(Nex);
}
}
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
if (Map[i][j]=='@')
{
ans++;
}
}
}
cout<<ans;
return 0;
}`
评论: