浅谈DFS算法

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅谈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; 

            //由此可以看到方向的优先级分辨是:左、右、下、上
            if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值