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

DFS算法

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

DFS算法

DFS算法–C++``
找出最短路径,其中,有些位置有障碍,不能通行。
主要用到的是递归和回溯

#include
#include
using namespace std;
int m, n, ystart,xstart,p, q;
int min = 99999;
vector > a1(100,vector (100,0)) ;   //表示构建的空间分布
vector > a2(100, vector(100, 0));  //表示是否被访问过
vector dy = {1 ,0 ,-1, 0};
vector dx = {0, 1 ,0 ,-1};

//空间不存在障碍物表示1,存在表示2
//a2表示空间是否被访问过,没有访问过为0,访问过为1
void dfs(int x, int y, int val)
{
	if (x == p && y ==q)
	{
		min = min < val? min : val;
		return;
	}
	for (int k = 0; k < 4; k++)
	{
		int xx = x + dx[k];
		int yy = y + dy[k];
		if (xx < m&&xx >= 0 && yy < n&&yy >= 0)
		{
			if (a1[xx][yy] == 1 && a2[xx][yy] == 0)
		    {
				a2[xx][yy] = 1;
			    dfs(xx, yy, val + 1);
			    a2[xx][yy] = 0;
		    }
		}
	}
	//顺序为右下左上
	
	return;
}
int main()
{
	cin >> m >> n;
	a1.resize(m);
	a2.resize(m);
	for (int i = 0; i < m; i++)
	{
		a1[i].resize(n);
		a2[i].resize(n);
	}
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> a1[i][j];
		}
	}
	cin >>xstart>>ystart>> p >> q;
	a2[xstart][ystart] = 1;
	dfs(xstart, ystart, 0);
	cout <
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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