回溯法:算法思路以及相关流程图的绘制

参考建模原文
2020国赛B题
参考文章1

回溯法介绍

深度优先搜索(缩写DFS):
对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。

回溯法:
把问题的解空间转化成了 或者 的结构表示,然后使用 深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。

回溯法在编程中主要通过 递归来实现。

回溯法解决迷宫问题

下图中,左上角为迷宫起点,右下角为迷宫终点。

编程思路

(以c#语言为例,其他语言相似)

初始化需要设置的相关参数:

public Stack path = new Stack(); //一条找到的路径
public Stack bestPath = new Stack(); //最优路径

其中 bestPath 为最优路径结果, 而 path 为递归过程中存储路径的堆栈,是一个不断在变化与更新的量。

主要递归函数如下(程序主要展现思路):

private void MazeTrack(int x, int y)
{
    Point p = new Point(x, y);
    path.Push(p);
    mazeData[x, y] = 3;

    //如果该位置是出口,输出结果
    if (x == exitX && y == exitY)
    {

        //判断是否更优
        if (bFrist)
        {
            //如果是找到的第一条路径,直接复制到最优路径
        }
        else
        {
            //不是第一条,则判断是否更短
            //更短,复制到最优路径
        }
    }

    //判断(x,y)位置的上、下、左、右是否可走
    if ((x - 1) >= 0 && mazeData[x - 1, y] == 0)//上(x-1,y);存在且可走
    {
        MazeTrack(x - 1, y);
    }
    if ((x + 1) < mazeHeight && mazeData[x + 1, y] == 0)//下(x+1,y);存在且可走
    {
        MazeTrack(x + 1, y);
    }
    if ((y - 1) >= 0 && mazeData[x, y - 1] == 0)//左(x,y-1);存在且可走
    {
        MazeTrack(x, y - 1);
    }
    if ((y + 1) < mazeWidth && mazeData[x, y + 1] == 0)//右(x,y+1);存在且可走
    {
        MazeTrack(x, y + 1);
    }

    //上下左右均无法移动,则结束本层递归,返回上一节点
    path.Pop();
    mazeData[x, y] = 0;         //设置为未走
}

Original: https://www.cnblogs.com/litecdows/p/16549010.html
Author: litecdows
Title: 回溯法:算法思路以及相关流程图的绘制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610462/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot-MVC自动配置原理

    MVC自动配置原理 5.1 官网阅读 在进行项目编写前,我们还需要知道一个东西,就是SpringBoot对我们的SpringMVC还做了哪些配置,包括如何扩展,如何定制。 只有把这…

    Linux 2023年6月14日
    0105
  • 魔域来了H5游戏详细图文架设教程

    前言 想体验热血传奇的战场吗?想体验满级VIP的尊贵吗?想体验榜一大佬的无敌寂寞吗?各种极品炫酷时装、坐骑、翅膀、宠物通通给你,就在魔域来了H5! 本文讲解魔域来了架设教程,想研究…

    Linux 2023年6月7日
    0120
  • [转帖]shell学习之shell基础知识了解

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年5月28日
    0106
  • prometheus operator 监控redis-exporter

    创建 redis-exporter service bash;gutter:false; apiVersion: v1 kind: Service metadata: labels…

    Linux 2023年5月28日
    0100
  • 一键部署服务(shell)

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Willoneday/p/16534113.htmlAu…

    Linux 2023年6月7日
    093
  • Jstack排查线上CPU100%

    Jstack排查线上CPU100% 介绍 jstack是JVM自带的Java堆栈跟踪工具,用于生成java虚拟机当前时刻的线程快照,来帮助定位线程出现长时间停顿的原因,例如死锁、死…

    Linux 2023年6月6日
    0106
  • 庐山真面目之十三微服务架构中如何在Docker上使用Redis缓存

    一、介绍 1、开始说明在微服务器架构中,有一个组件是不能少的,那就是缓存组件。其实来说,缓存组件,这个叫法不是完全正确,因为除了缓存功能,它还能完成其他很多功能。我就不隐瞒了,今天…

    Linux 2023年5月28日
    080
  • linux free命令available小于free值

    问题:前段时间在做服务器巡检时发现系统可用内存值小于空闲内存值 分析:查询网上各种资料,都说的是 available=free + buff/cache 这样一个大致计算方式,按这…

    Linux 2023年6月14日
    0173
  • Java基础系列–06_抽象类与接口概述

    抽象类与接口的简单概述 抽象类(1)如果多个类中存在相同的方法声明,而方法体不一样,我们就可以只提取方法声明。如果一个方法只有方法声明,没有方法体,那么这个方法必须用抽象修饰。而一…

    Linux 2023年6月7日
    091
  • CentOS7 源码安装Nginx及Nginx基本管理设置

    CentOS7 安装 参考文档 CentOS7最小安装后初始化安装工具 1:yum install net-tools 参考文档 2:源码安装wget 参考文档 或者执行 yum …

    Linux 2023年5月27日
    0121
  • Centos7 禁用IPV6地址的方法

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    084
  • [ Skill ] load 函数优化,识别相对路径

    在 cds.lib 文件中定义库的路径,为了规范管理库的定义,经常这样做: $ tree . |– cds.lib ——————- cat –> …

    Linux 2023年6月7日
    0102
  • 5.5 Vim移动光标命令汇总

    Vim 文本编辑器中,最简单的移动光标的方式是使用方向键,但这种方式的效率太低,更高效的方式使用快捷键。 Vim 移动光标常用的快捷键及其功能如下面各表所示,需要注意的是,表中所有…

    Linux 2023年6月7日
    0106
  • Beyond Compare文件对比神器,快来给文件找茬!

    在工作中很多场景下都需要比对两个文件之间的差异,你是否还傻傻的同时打开两个文件,用眼睛一行一行的核对? 赶紧来试试这个神器Beyond Compare!!它可以快速的帮你找出两个文…

    Linux 2023年6月7日
    0107
  • PHP利用Apache、Nginx的特性实现免杀Webshell

    环境函数用法 nginx get_defined_vars() 返回由所有已定义变量所组成的数组 apache getallheaders() 获取全部 HTTP 请求头信息 ap…

    Linux 2023年5月28日
    080
  • 误删除系列二:恢复已经删除文件

    背景:基于对恢复的好奇心,所以写一系列相关的博客,在linux没有回收站这一说法,通过rm -rf file的操作,如何恢复 以下的讨论分为两种情况: 删除后进程还能找到情况 删除…

    Linux 2023年6月7日
    075
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球