首页 > 编程语言 >深度优先搜索求最短路径DFS C#实现

深度优先搜索求最短路径DFS C#实现

时间:2022-10-23 15:36:57浏览次数:78  
标签:C# 路径 DFS setpNumber cY cX rst nextX nextY

搜索效果

 C#项目文件可以点击下载

 

 

 

搜索最短路径的代码:

/// <summary>
///DFS求最短路径
/// </summary>
/// <param name="cX">当前点X坐标</param>
/// <param name="cY">当前点Y坐标</param>
/// <param name="setpNumber">达到当前点的步数</param>
/// <returns>是否找到路径</returns>
public bool SearchShortPath(int cX, int cY,uint setpNumber) {
            TotalSetp++;    //搜索总次数记录
            bool rtn = false;//最终搜索的结果,是否找到路径
            bool rst = false;//已经找到路径标记
            if (setpNumber < MapStep[cX, cY])//MapStep中存储的是到达该点的最小步数
            {
                MapStep[cX, cY] = setpNumber;
                if (cX == PTarget.X && cY == PTarget.Y) {//PTarget是目标点
                    ShortBrights = (bool[,])Brights.Clone();
                }
            }
            else {
                return false;//如果之前到过这个点,并且步数比这次少,则直接返回
            }
            //到点标记
            Brights[cX, cY] = true;
            //判断是否到终点
            if (cX == PTarget.X && cY == PTarget.Y)
            {
                return true;
            }
            if (ShowProcess) {//用于界面显示,与计算无关
                if (TimeDelay > 0)
                {
                    Show();
                    Thread.Sleep(TimeDelay);
                }
            }
            //向左搜索
            int nextX = cX - 1;
            int nextY = cY;
            if (IsReachable(nextX, nextY))//IsReachable()判断该点是否可以到达,在地图范围内,且不为阻碍则可以到达
            {
                rst = SearchShortPath(nextX, nextY, ++setpNumber);
                Brights[nextX, nextY] = false;  //到点标记置为FALSE
                setpNumber--;
            }
            if (rst)
            {
                rtn= true;
            }
            //向右搜索
            nextX = cX + 1;
            nextY = cY;
            if (IsReachable(nextX, nextY))
            {
                rst = SearchShortPath(nextX, nextY, ++setpNumber);
                Brights[nextX, nextY] = false;
                setpNumber--;
            }
            if (rst)
            {
                rtn= true;
            }
            //向上搜索
            nextX = cX;
            nextY = cY - 1;
            if (IsReachable(nextX, nextY))
            {
                rst = SearchShortPath(nextX, nextY,++setpNumber);
                Brights[nextX, nextY] = false;
                setpNumber--;
            }
            if (rst)
            {
                rtn= true;
            }
            //向下搜索
            nextX = cX;
            nextY = cY + 1;
            if (IsReachable(nextX, nextY))
            {
                rst = SearchShortPath(nextX, nextY, ++setpNumber);
                Brights[nextX, nextY] = false;
                setpNumber--;
            }
            if (rst)
            {
                rtn = true;
            }
            
            return rtn;
        }

  

标签:C#,路径,DFS,setpNumber,cY,cX,rst,nextX,nextY
From: https://www.cnblogs.com/lt33/p/16818590.html

相关文章

  • JavaScript提示框
    1.alert("123");阻塞函数,会生成一个提示框仅包含一个不会返回任何值的按钮和一个消息 2.confirm("123");判断函数,会生成一个提示框,提示框内含确认与否定如果选择确......
  • C语言学习--多文件编程(未完待续)
    多文件编程:将多个包含不同功能函数的.c文件,编译在一起,生成一个exe文件防止多文件重复包含,即多文件守卫。(在main函数的.c文件里面,只导入一次,防止多次导入)(1)#p......
  • Atcoder ABC274 记录
    [ABC274A]BattingAverage略。[ABC274B]LineSensor略。[ABC274C]Ameba建树维护亲代关系即可。[ABC274D]RobotArms2按下标奇偶性分为两类,然后分别做一遍背包......
  • Elasticsearch SpringBoot 整合 复杂检索
    官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html一、例子packagecom.atguigu.gulimall.search;imp......
  • Oracle Linux 7u2 启动错误 XFS_WANT_CORRUPTED_GOTO
    OracleLinux7u2 (OracleLinux-R7-U2-Server-x86_64-dvd.iso) 安装海锋五笔(ibus-table-chinese-wubi-haifeng-1.4.6-3.el7.noarch.rpm)后,启动系统失败。 XFS: In......
  • Qt获取QObject对应的类名并把它转为真实类型
    QObject是有窗口类的父类,比如QWidget,QLabel,QPushButton等都直接或间接继承自QObject类。如果把某个窗口中的所有控件都装到一个QList<QObject*>中,那么如何区分当前的是那......
  • C/C++ 一维数组和二维数组参数传递的几种方式
    一维数组:#include<iostream>#include<windows.h>#include<string>usingnamespacestd;//在以下几种方法中,ages都不是真正的数组,实际上是一个指针int*agesint......
  • cat userlist
    Linux文件系统的三层抽象是什么?第一层抽象:从磁盘到分区 分区可以看作磁盘 两个512G的硬盘跟一个1T的硬盘分成两个区第二层抽象:从磁盘到序列块 块数组与字节数组第......
  • ABC274D题解
    这是一道较为简单的可行性DP。首先看到题目,很容易想到将横纵坐标一起进行处理,但显然时间会炸飞。所以我们将横纵坐标拆开分别处理,那么就有如下状态:\(dpa_{i,j}\)表示在......
  • MILIANKE-CK03-900核心模块-325T/410T(MK7X900)
    1产品概述KintexMK7X900B是米联客电子Kintex-7系列开发平台的全新高端产品。其核心模块集成电源管理:KintexMK7X900B:1.0V核心电源,最大输出24A。用户基于核心模块设计功......