C++深度优先搜索迷宫(加强版)

在这里插入图片描述
在这里插入图片描述
普通版代码:

//Author:PanDaoxi
#include <iostream>
using namespace std;
int dx[5]={
    
    -1,0,1,0},dy[5]={
    
    0,1,0,-1};
int G[51][51],vis[51][51],n,sx,sy,ex,ey;
bool f=false;
void dfs(int x,int y){
    
    
	if(x==ex&&y==ey){
    
    
		cout<<"yes";
		f=true;
		return;
	}
	for(int i=0;i<4;i++){
    
    
		int x2=x+dx[i],y2=y+dy[i];
		if(x2>=1&&x2<=n&&y2>=1&&y2<=n&&G[x2][y2]&&!vis[x2][y2]){
    
    
			vis[x2][y2]=1;
			dfs(x2,y2);
		}
	}
}
int main(){
    
    
	cin>>n;
	for(int i=1;i<=n;i++){
    
    
		for(int j=1;j<=n;j++){
    
    
			cin>>G[i][j];
		}
	} 
	cin>>sx>>sy>>ex>>ey;
	if(sx==ex&&sy==ey){
    
    
		cout<<"yes";
		return 0;
	}
	vis[sx][sy]=1;
	dfs(sx,sy);
	if(!f){
    
    
		cout<<"no";
	}
	return 0;
} 

加强版代码:

//Author:PanDaoxi
#include <iostream>
using namespace std;
int dx[5]={
    
    -1,0,1,0},dy[5]={
    
    0,1,0,-1};
int G[31][31],vis[31][31],n,sx,sy,ex,ey,A[1000][3];
bool f=false;
void dfs(int x,int y,int d){
    
    
	if(x==ex&&y==ey){
    
    
		for(int i=0;i<d-1;i++){
    
    
			cout<<"("<<A[i][0]<<","<<A[i][1]<<")"<<"-->"; 
		} 
		cout<<"("<<ex<<","<<ey<<")";
		f=true;
		return;
	}
	for(int i=0;i<4;i++){
    
    
		int xx=x+dx[i],yy=y+dy[i];
		if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&G[xx][yy]&!vis[xx][yy]){
    
    
			vis[xx][yy]=1;
			A[d][0]=xx,A[d][1]=yy;
			dfs(xx,yy,d+1);
		} 
	}
}
int main(){
    
    
	cin>>n;
	for(int i=1;i<=n;i++){
    
    
		for(int j=1;j<=n;j++){
    
    
			cin>>G[i][j];
		}
	}
	cin>>sx>>sy>>ex>>ey;
	if(sx==ex&&sy==ey){
    
    
		cout<<"yes"<<endl;
		return 0;
	}
	A[0][0]=sx,A[0][1]=sy;
	vis[sx][sy]=1;
	dfs(sx,sy,1);
	if(!f){
    
    
		cout<<"no"<<endl;
	} 
	return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/PanDaoxi2020/article/details/121064696
今日推荐