栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++深度优先搜索

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++深度优先搜索



图中x表示无法移动。不可以走走过的路程,所以为x。

(个人喜欢“上→右→下→左”的顺序)

//Author:PanDaoxi
#include 
using namespace std;
//创建模拟地图、记录点否用过的变量 
int G[105][105],vis[105][105],n; 
//位置变化:上右下左 
int dx[5]={-1,0,1,0},  //x坐标的位置变化 
    dy[5]={0,1,0,-1};  //y坐标的位置变化 
//标记是否有解
bool f=false;
//深搜函数
void dfs(int x,int y){
	//如果(x,y)存在目标,则有解 
	if(G[x][y]==2){
		f=true;
		return;
	}
	//向四个方向搜索 
	for(int i=0;i<4;i++){
		//更新坐标位置 
		int x2=x+dx[i],y2=y+dy[i]; 
		//判断是否在地图中
		//如果G[x2][y2]!=1,则可以搜索
		//vis[x2][y2]==0,没走过,可以搜索 
		if(x2>=0&&x2=0&&y2>n;
	//初始化地图 
	for(int i=0;i>G[i][j];
		} 
	}
	//搜索:先处理两种简单情况,如果没有则搜索
	if(G[0][0]==1){ //如果当前位置就是障碍,则无法搜索
		cout<<"NO";
		return 0;
	} 
	else if(G[0][0]==2){ //如果当前位置就是目标,则不用搜索,直接成功 
		cout<<"YES";
		return 0;
	}
	else{ //如果都没有出现则进行深度优先搜索
		vis[0][0]=1;
		dfs(0,0);
		if(f){
			cout<<"YES"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号