深度搜索(迷宫)

#include <iostream>
using namespace std;
int migong[10000][10000];int sx,sy,ex,ey;int flag=0;
void digui(int x,int y){
	if(x==ex&&y==ey){
		flag=1;return;
	}
	if(migong[x][y]==2){
		return;
	}
	migong[x][y]=2;
	if(migong[x-1][y]==1){
		digui(x-1,y);
	}
	if(migong[x+1][y]==1){
		digui(x+1,y);
	}
	if(migong[x][y+1]==1){
		digui(x,y+1);
	}
	if(migong[x][y-1]==1){
		digui(x,y-1);
	}
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			char a;
			cin>>a;
			if(a=='S'){
				sx=i;sy=j;
				migong[i][j]=1;
			}
			if(a=='X'){
				migong[i][j]=0;
			}
			if(a=='.'){
				migong[i][j]=1;
			}
			if(a=='T'){
				ex=i;ey=j;
				migong[i][j]=1;
			}
		}
	}
	digui(sx,sy);
	if(flag){
		cout<<"YES";
	}
	else{
		cout<<"NO";
	}
}

  2 限制步数:回溯

#include <iostream>
using namespace std;
int migong[10000][10000];int sx,sy,ex,ey,t,n,m;int flag=0;
void digui(int x,int y,int bu){
	if(x==ex&&y==ey){
		if(bu>t){
			return;
		};
		flag=1;return;
	}
	if(migong[x][y]==2){
		return;
	}
	migong[x][y]=2;
	if(migong[x-1][y]==1){
		digui(x-1,y,bu+1);
		migong[x][y]=1;
	}
	if(migong[x+1][y]==1){
		digui(x+1,y,bu+1);
		migong[x][y]=1;
	}
	if(migong[x][y+1]==1){
		digui(x,y+1,bu+1);
		migong[x][y]=1;
	}
	if(migong[x][y-1]==1){
		digui(x,y-1,bu+1);
		migong[x][y]=1;
	}
}
int main(){
	cin>>n>>m>>t;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			char a;
			cin>>a;
			if(a=='S'){
				sx=i;sy=j;
				migong[i][j]=1;
			}
			if(a=='X'){
				migong[i][j]=0;
			}
			if(a=='.'){
				migong[i][j]=1;
			}
			if(a=='T'){
				ex=i;ey=j;
				migong[i][j]=1;
			}
		}
	}
	digui(sx,sy,0);
	if(flag){
		cout<<"YES";
	}
	else{
		cout<<"NO";
	}
}

  

 

posted @ 2020-10-09 20:29  慕舲-不再使用  阅读(295)  评论(0编辑  收藏  举报