#include<iostream>
#include<queue>
#include<cstring>
#include<stack>
using namespace std;
bool vis[20][20]= {0};
int str[20][20];
int n,m;
int bx,by;
struct node{
int x;
int y;
int num;
friend bool operator<(node a,node b){
return a.num>b.num;
}
}fd[100][100];
int mov[4][2]={ 0,1,0,-1,1,0,-1,0};
int ans=0;
void bfs(){
priority_queue <node > que;
node st1,st2;
st1.x=0;
st1.y=0;
st1.num=0;
que.push(st1);
vis[st1.x][st1.y]=1;
while(!que.empty()){
st2=que.top();
if(st2.x==4 && st2.y==4){
break;
}
que.pop();
for(int i=0;i<4;i++){
st1.x=st2.x+mov[i][0];
st1.y=st2.y+mov[i][1];
st1.num=st2.num+1;
if(st1.x<0 ||st1.x>=5 || st1.y<0 || st1.y>=5 || str[st1.x][st1.y]==1 || vis[st1.x][st1.y]==1 ) continue ;
vis[st1.x][st1.y]=1;
que.push(st1);
fd[st1.x][st1.y]=st2;//记录路径;
}
}
}
int main(){
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
cin>>str[i][j];
}
ans=0;
bfs();
stack < node > stk;//入栈
node tt=fd[4][4];
while(! (tt.x==0 && tt.y==0)){
stk.push(tt);
tt=fd[tt.x][tt.y];
}
cout<<"(0, 0)"<<endl;
while(!stk.empty()){//输出路径
cout<<'('<<stk.top().x<<','<<" "<<stk.top().y<<')'<<endl;
stk.pop();
}
cout<<"(4, 4)"<<endl;
return 0;
}
bfs迷宫问题记录路径
猜你喜欢
转载自blog.csdn.net/guozuofeng/article/details/81331465
今日推荐
周排行