下面是这位蒟蒻的代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;
struct Queue
{
int x;
int y;
int step;
}q[500];//队列
int head=1,tail=1;//队列指针
const int xx[4]={0,-1,0,1};
const int yy[4]={1,0,-1,0};//上左下右
char t[25][25]; //原图
bool book[25][25]; //标记
int m,n,qx,qy,zx,zy;//矩阵大小,起终点坐标
void bfs(int x,int y)
{
while(head<tail)
{
if(t[zx][zy]=='*') break; //如果已经找到,退出
for(int i=0;i<4;i++)
{
int nx=q[head].x+xx[i];
int ny=q[head].y+yy[i];//新点坐标
if(nx==zx&&ny==zy){
cout<<q[head].step+1<<endl;
t[zx][zy]='*'; //特殊标记
}
else if(nx>=0&&nx<m&&ny>=0&&ny<n&&t[nx][ny]=='.'&&book[nx][ny]==0)//判边判重
{
q[tail].x=nx;
q[tail].y=ny;
q[tail].step=q[head].step+1;
book[nx][ny]=1;
}
}
head++;//队首出队
}
}
int main()
{
while(scanf("%d %d",&m,&n))//据题意,不为0一直输入
{
if(m==0&&n==0) break;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)//坐标从0开始
{
cin>>t[i][j];
if(t[i][j]=='@'){ //找起点
qx=i;
qy=j;
t[i][j]='.';
}
else if(t[i][j]=='*'){ //找终点
zx=i;
zy=j;
t[i][j]='.';
}
}
}
cout<<qx<<" "<<qy<<" "<<zx<<" "<<zy<<endl;
q[tail].x=qx;
q[tail].y=qy;
q[tail].step=0;
book[qx][qy]=1;
tail++; //起点入队并标记
bfs(qx,qy);
if(t[zx][zy]!='0') cout<<"-1"<<endl; //如果没找到,输出-1
head=1;tail=1;//队列指针恢复
}
return 0;
}
注释是自己加的,不知道为什么只输出-1
求大佬们帮着看看吧