‘#’表示墙壁,‘.’表示路,‘!’表示终点,‘@’表示出生点。
输入一个n表示矩阵宽度
.....(此处省略)
输出到终点的最短路径(若干个“<x,y>”)
#include<bits/stdc++.h>
using namespace std;
int f[2][1000],dx[4]={0,1,-1,0},dy[4]={1,0,0,-1},ans=999,n;
char s[100][100];
int bfs(int x,int y,int r){
bool q=0;
int l=r;
if(x>0&&x<=n&&y>0&&y<=n&&s[x][y]=='!'&&l<ans){
ans=r;
f[0][r]=x;
f[1][r]=y;
return 1;
}
for(int i=0;i<=3;i++){
if((x+dx[i])<=n&&(y+dy[i])<=n&&(x+dx[i])>0&&(y+dy[i])>0&&s[x+dx[i]][y+dy[i]]!='#'){
if(bfs(x+dx[i],y+dy[i],l+1)==1){//就是这里程序出问题
q=1;
f[0][r]=x;
f[1][r]=y;
}
}
}
if(q){
return 1;
}
return 0;
}
int main(){
int x,y;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>s[i][j];
if(s[i][j]=='@'){
x=i,y=j;
}
}
}
int w;
w=bfs(x,y,1);
if(w==2){
cout<<-1<<endl;
}
else{
for(int i=1;i<=ans;i++){
cout<<"<"<<f[0][i]<<','<<f[1][i]<<">"<<endl;
}
}
return 0;
}