这题教才答案有误

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;

}`


评论: