求最短路径打印出来。
直接bfs 然后寸以下路径递归出来。
//#include<bits/stdc++.h>
#include<stdio.h>
#include<queue>
#include<string.h>
#define LL long long
using namespace std;
int a[10][10];
int v[10][10];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
struct node{
int x,y,step;
}e,u;
struct way{
int x,y;
}w[10][10];
int judge(int x,int y){
if(x<1||y<1||x>5||y>5||v[x][y]) return 0;
if(a[x][y]==1) return 0;
return 1;
}
void wway(int x,int y){
if(x==1&&y==1){
return;
}
wway(w[x][y].x,w[x][y].y);
printf("(%d, %d)\n",w[x][y].x-1,w[x][y].y-1);
}
void bfs(){
memset(v,0,sizeof(v));
v[1][1]=1;
w[1][1]={1,1};
e={1,1,0};
queue<node>que;
vector<way>vec;
que.push(e);
while(!que.empty()){
u=que.front();
que.pop();
for(int i=0;i<4;i++){
e.x=u.x+dir[i][0];
e.y=u.y+dir[i][1];
if(judge(e.x,e.y)){
e.step=u.step+1;
v[e.x][e.y]=1;
w[e.x][e.y]={u.x,u.y};
que.push(e);
}
}
}
}
int main(){
for(int i=1;i<=5;i++)
for(int j=1;j<=5;j++)
scanf("%d",&a[i][j]);
bfs();
wway(5,5);
printf("(4, 4)\n");
return 0;
}