bfs迷宫问题记录路径

迷宫问题+bfs(记录路径)

#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;
}

猜你喜欢

转载自blog.csdn.net/guozuofeng/article/details/81331465