浅谈DFS算法

本文深入探讨了DFS算法,主要用于NPC的自动寻路。虽然BFS和A*可能是更优选择,但DFS提供了另一种解决方案。通过递归遍历所有可能的路径,判断每个坐标及其邻居是否可达。在遍历过程中,当找到与终点相等的坐标时,返回路径链表。文章通过图解和实例详细解释了DFS的工作原理。
摘要由CSDN通过智能技术生成

浅谈DFS算法

DFS,深度搜索算法。可以用于NPC的自动寻路。当然 BFS和 A*可能较优。
过程解析:寻路算法动画演示

主要的思路是通过For循环遍历全部可能的方向,在遍历的同时使用递归持续监测该坐标及邻居是否能走得通。(个人解读)
分析一下:
1、使用For循环——将某点(以(1,1)为例),寻找出上下左右四个方向的邻居(即(0,1) (2,1) (1,0) (1,2)四点)。邻居节点图
2、对周围4点进行判断——是否能通,即 A、是否为墙B、是否出界
如果能通——对该坐标进行标记,并将(1,1)作为该点的父节点,然后执行下一步
如果不通——放弃递归(记住此步骤,后面会提到),直接执行下一步
3、如果能通,便以该点为中心继续进行第二点,判断四周是否能通。(开始递归)

而此时第三步开始递归,并遍历所有可能的情况

直到某一个邻居与终点坐标相等,返回路径链表(第二步储存了父节点)


寻找邻居的代码:

private static List<Node> getNeighbor(Node currentNode)
        {
   
            List<Node> nodes = new List<Node>();            //初始化变量
            int x = currentNode.X;
            int y = currentNode.Y
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DFS算法(深度优先搜索算法,Depth-First Search)是一种常用的图搜索算法,用于遍历或搜索图或树的所有节点。DFS算法通过递归的方式实现,在搜索过程中优先探索深度,直到到达叶节点再回溯。 在MATLAB中实现DFS算法,可以采用如下步骤: 1. 创建一个函数,用于实现DFS算法。命名为dfs。 2. 设置输入参数,例如起始节点和目标节点。 3. 初始化一个栈数据结构,用于保存待搜索的节点。 4. 初始化一个集合,用于保存已访问的节点。 5. 将起始节点压入栈中,并标记为已访问。 6. 当栈不为空时,执行以下步骤: a. 弹出栈顶节点,将其标记为已访问。 b. 如果当前节点是目标节点,则搜索完成,返回。 c. 如果当前节点不是目标节点,则获取其所有邻接节点。 d. 遍历邻接节点: - 如果邻接节点没有被访问过,则压入栈中,并标记为已访问。 e. 重复步骤6直到栈为空。 7. 如果栈为空仍未找到目标节点,则搜索失败,返回。 使用DFS算法可以解决很多与图相关的问题,例如寻找图中路径,判断图的连通性等。在实际应用中,可以根据具体的问题进行相应的修改和优化,以适应不同的需求。 需要注意的是,在实际编写代码时,应该考虑避免重复访问节点,避免死循环,以及处理异常情况。另外,对于复杂的图结构,可能需要使用其他数据结构或算法进行优化,以提高搜索效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值