rt,原题题面
我的代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=25;
const int dx[]={1,0,-1,0};
const int dy[]={0,1,0,-1};
struct P
{
int x,y;
}q[MAXN*MAXN];
int m,n,ax,ay,bx,by,f,r,dis[MAXN][MAXN];
bool g[MAXN][MAXN],st[MAXN][MAXN];
int bfs()
{
q[r++]={ax,ay},st[ax][ay]=1,g[ax][ay]=1;
while (f!=r)
{
P tmp=q[f++];
if (tmp.x==bx&&tmp.y==by) return dis[tmp.x][tmp.y];
for (int i=0;i<4;i++)
{
int x=tmp.x+dx[i],y=tmp.y+dy[i];
if (x<1||x>m||y<1||y>n) continue;
if (st[x][y]||!g[x][y]) continue;
q[r++]={x,y};
st[x][y]=1;
dis[x][y]=dis[tmp.x][tmp.y]+1;
}
}
return -1;
}
int main()
{
//freopen("Input.txt","r",stdin);
//freopen("Output.txt","w",stdout);
while (1)
{
cin>>m>>n;
if (m==0&&n==0) break;
for (int i=1;i<=m;i++)
for (int j=1;j<=n;j++)
{
char c;
cin>>c;
if (c=='.') g[i][j]=1;
else if (c=='@') g[i][j]=1,ax=i,ay=j;
else if (c=='*') g[i][j]=1,bx=i,by=j;
}
cout<<bfs()<<endl;
}
return 0;
}
错误输出结果
10
-1
-1
可能是因为多组数据的输入,dis数组未能初始化导致答案错误,但是我不知道在哪里进行初始化