C算法-DFS(深度优先搜索法)带返回值

本文介绍了如何使用C语言的深度优先搜索(DFS)算法解决LeetCode的490和499题,即迷宫问题。重点在于在DFS中处理返回值的写法,包括在主函数中进行节点遍历和判断,以及在DFS函数内部的边界检查、已访问标记和递归调用。同时强调了满足条件时的处理和返回值的设定,特别是当需要记录最小路径时,可以通过全局变量存储路径信息。
摘要由CSDN通过智能技术生成

leetcode490题,迷宫。
leetcode499题,迷宫III,求到某个点的最小路径“lul”
带返回值与普通的C算法-DFS(深度优先搜索法)在写法上要注意的是:标记访问这个一定要有,如果本身条件不答应,就建立个数组vistied[MAXLEN][MAXLEN]
1、for循环节点,和判断什么时候递归,放在主函数,与回溯风格明显不同。
2、dfs结构:a、if 出界 xxx;b、if被访问过 xxx;c、如果成功 xxx;d、标记访问; c、dfs(next)
3、注意满足条件这个地方一定要好好填
4、新增注意,返回值都要填

比如499题目要传入最小路径做对比,那么需要在如果成功xxxx中进行算法分析。
像这种要增加字符串的,可以把字符串,当前字符串,当前字符串index作为全局变量操作

char g_ret[1000];
char g_final[1000];
int g_c;

bool dfs(int** maze, int row, int col, int sx, int sy, int dx, int dy, int count)
{
   
	if (maze[sx][sy] != 0 && maze[sx][sy] < count) {
   
		return false;
	}
	if (sx == dx && sy == dy) {
   
		g_ret[g_c++] = '\0';
		if (maze[sx][sy] == count && strcmp(g_final, g_ret) < 0) {
   
			g_c--;
			return false;
		}
		maze[sx][sy] = count;
		memcpy(g_final, g_ret, g_c);
		g_c--;
		return true;
	}

	maze[sx][sy] = count;
	int d, l, r, u, dcount, lcount, rcount, ucount;
	bool dflag, lflag, rflag, uflag;
	d = u = sx;
	l = r = sy;
	lcount = dcount = rcount = ucount = count;
	dflag = lflag = rflag = uflag = false;
	while (d + 1 < row && maze[d + 1][sy] != 1) {
   
		d++;
		dcount++;
		if (sy == dy && d 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值