迷宫问题寻宝(c++实现,求最短路径,显示路径)

2023-11-01

定义一个二维数组: int maze[n][m]; 它表示一个迷宫,其中的1表示道路不通,0表示可以走的路,3 表示宝藏。只能横着走或竖着走,不能斜着走,要求编程序找出找到宝藏的最短路路径,题目保证有解且只有一个最短路径。且只能从迷宫边缘进入迷宫。

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 3, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};

输出路径为

{{2,0},{2,1},{2,2}}

代码为

#include<iostream>
#include<algorithm>
#include <stack>
#include <set>
#include <map>
#include <queue>
#include<sstream>
using namespace std;

vector<vector<int>> res;
bool cmp(vector<int>& v1, vector<int>& v2) {
    return v1.size() < v2.size();
}
void dfs(vector<vector<int>>& matrix, vector<int>& trace, int i, int j) {
    int m = matrix.size();
    int n = matrix[0].size();
    if (i < 0 || i >= m || j < 0 || j >= n) return;
    if (matrix[i][j] == 1 || matrix[i][j] == -10) {
        return;
    }
    if (matrix[i][j] == 3) {
        //添加宝藏坐标
        trace.push_back(i);
        trace.push_back(j);
        res.push_back(trace);
       
        //回溯
        trace.pop_back();
        trace.pop_back();
        return;

    }
    //添加路径坐标
    trace.push_back(i);
    trace.push_back(j);
    matrix[i][j] =-10;//防止往回走
    
    dfs(matrix, trace, i, j + 1);
    dfs(matrix, trace, i, j - 1);
    dfs(matrix, trace, i + 1, j);
    dfs(matrix, trace, i - 1, j);
    matrix[i][j] = 0;
    trace.pop_back();
    trace.pop_back();

}
int main() {
    vector<vector<int>>matrix = { { 0, 1, 1, 1 } ,{0,0,0,1},{1,0,3,1}, {1,0,1,1} };
    int m = matrix.size();
    int n = matrix[0].size();
    vector<int>trace;
    for (int i = 0; i < m; i++) {
        if (matrix[i][0] == 0) {
            dfs(matrix, trace, i, 0);
        }
        if (matrix[i][n - 1] == 0) {
            dfs(matrix, trace, i, n-1);
        }
    }
    for (int i = 0; i < n; i++) {
        if (matrix[0][i] == 0) {
            dfs(matrix, trace, 0, i);
        }
        if (matrix[m-1][i] == 0) {
            dfs(matrix, trace, m-1,i );
        }
    }
    sort(res.begin(), res.end(), cmp);
    vector<vector<int>>ans;
    vector<int>temp = res[0];
    
    for (int j = 0; j < temp.size(); j += 2) {
     
        ans.push_back({ temp[j], temp[j + 1] });

    }
         

    
    for (int i = 0; i < ans.size(); i++) {
        cout << ans[i][0] <<"\t" << ans[i][1] << endl;
    }
    //输出ans即可




}


 


 




 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

迷宫问题寻宝(c++实现,求最短路径,显示路径) 的相关文章

  • Postsharp 不登录跟踪级别

    我喜欢在跟踪级别记录一些 Postsharp 消息 不幸的是 日志到这个级别没有打印任何输出 所有其他级别都在工作 与控制台或 NLog 后端或从其他类登录时的行为相同 如何启用跟踪级别 应用程序 xaml cs Log Attribute
  • 为什么在 lambda 内部引发异常是 C# 7 的一项功能? [复制]

    这个问题在这里已经有答案了 该语句在 VS2015 中无法编译 但在 VS2017 中可以编译 var example new Action gt throw new Exception 为了支持在 lambda 表达式内抛出异常 必须对
  • 为什么我应该使用内联代码? [复制]

    这个问题在这里已经有答案了 我是一名 C C 开发人员 这里有几个始终困扰我的问题 常规 代码和内联代码之间有很大区别吗 主要区别是什么 内联代码只是宏的一种 形式 吗 选择内联代码时必须进行什么样的权衡 Thanks 表现 正如之前的答案
  • C语言实现延时函数

    我想使用空循环实现延迟函数 但是完成一次循环所需的时间取决于编译器和机器 我希望我的程序自行确定时间并将程序延迟指定的时间 谁能给我任何想法如何做到这一点 注意 有一个名为delay 的函数可以将系统暂停指定的毫秒 是否可以在不使用此功能的
  • 更改图像颜色与透明背景

    我需要使用 c System Drawings 将透明背景上带有绿色圆圈的图像加载到位图图像中 这是最简单的部分 但是 我需要在将其添加到更大的图像之前更改圆圈的颜色 而不影响周围的透明度 就我而言 我需要将圆圈颜色更改为黄色并将其添加为太
  • C 中的 '\0' 和 printf()

    在 C 入门课程中 我了解到在存储字符串时存储空字符 0在它的最后 但是如果我想打印一个字符串怎么办 printf hello 虽然我发现它并没有结束 0通过以下声明 printf d printf hello Output 5 但这似乎不
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 为什么我收到编译错误“使用已删除的函数 'std::unique_ptr ...”

    我收到一条巨大的编译错误消息 c mingw include c 6 1 0 bits predefined ops h 123 18 error use of deleted function std unique ptr lt Tp D
  • 将 std::pair const 转换为 std::pair const 安全吗?

    理论上或实践上 安全吗reinterpret cast a std pair
  • FFplay成功移入我的Winform中,如何设置它无边框?

    用这个代码 在 C 应用程序中显示 tcp 视频流 来自 FFPLAY FFMPEG https stackoverflow com questions 14201894 show a tcp video stream from ffpla
  • 如何解析多态 JSON 数组?

    我有一个 JSON 格式的文件 其中包含个人用户的记录 一些用户的记录中间有一个评论字段 我只想解析顶级项目 全名 贡献者姓名 电子邮件 使用 Newtonsoft JSON 解析器 但我似乎无法让它识别单个对象 当我将整个字符串解析为一个
  • ef core 在更新数据库期间不使用 ASPNETCORE_ENVIRONMENT

    我使用 Visual Studio 通过一定的迁移来更新我的所有环境 使用下面的命令效果很好 update database Migration initMigrationProduct c ProductContext Environme
  • 解析连接字符串

    是否有标准库或代码片段可以使用这样的连接字符串获取值 string connstr DataServiceUrl http localhost foo RemoteServerConnection server http localhost
  • “DeploymentItem”属性是什么意思?

    假设我们有一个简短的程序 namespace ConsoleTryIt static class Program static void Main string args var sum Add 1 2 private static int
  • 当分配返回 0 时,具有空异常规范的运算符 new 调用构造函数

    我有以下声明 void operator new size t s PersistentMemory m throw return m gt allocatePersistentMemory s 我正在测试启动时的内存耗尽 这会导致m gt
  • Rx 在不同的线程上生产和消费

    我试图通过此处的示例代码来简化我的问题 我有一个生产者线程不断地输入数据 并且我尝试在批次之间添加时间延迟来对其进行批处理 以便 UI 有时间渲染它 但结果并不如预期 生产者和消费者似乎在同一个线程上 我不希望批处理缓冲区在正在生成的线程上
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 如何在realm-dotnet中存储System.Collections.Generic.Dictionary

    我正在尝试将 Realm NET 集成到我的 uwp 项目中 我想知道是否有任何方法可以在 Realm dotnet 库中存储 System Collections Generic Dictionary 我试过这个 public class
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • 推断“x => { throw .. }”的 Lambda 与重载方法中的 Func 匹配吗?

    我不明白为什么 C 最终在以下 LINQPad 代码中执行不正确的扩展方法 void Main Actual Sync Action Expected Sync Action Run x gt x Dump Actual Async Tas

随机推荐

  • 架构师成长之路|Redis配置文件参数讲解

    Redis conf文件 官网Redis文档链接 Redis官网 官网Redis config配置文件参数讲解 https redis io docs management config Redis conf参考模板例子 https red
  • js中元素样式设置的六种方法

    元素的样式设置六种方法 1 对象 style 2 对象 className 3 对象 setAttribute style 4 对象 setAttribute class 5 对象 style setProperty CSS属性 CSS属性
  • 回文串(增减版)

    题目描述 如何判断一个字符串在任意位置 包括最前面和最后面 插入一个字符后能不能构成一个回文串 输入描述 仅一行 为一个由字母和数字组成的字符串 s 输出描述 如果在插入一个字符之后可以构成回文串 则输出 Yes 否则输出 No 输入 ap
  • echarts里面如何设置仪表盘图表里面数字的颜色

    一 问题 仪表盘里面是数值颜色与背景不符 数字颜色太暗了 如下图所示 二 改变仪表盘数字刻度颜色的代码 axisLabel color auto auto就是和所在区域的颜色保持一致 distance 40 fontSize 20 三 整个
  • TensorFlow DLL文件缺失的解决方案:cudnn64_8.dll not found&cusolver64_10.dll not found

    本文目的 解决cublas64 11 dll not found cublasLt64 11 dll not found cufft64 10 dll not found curand64 10 dll not found cusolver
  • Solidity 文档--第一章:智能合约入门

    一个简单的智能合约 先从一个非常基础的例子开始 不用担心你现在还一点都不了解 我们将逐步了解到更多的细节 存储 contract SimpleStorage uint storedData function set uint x store
  • python中将字符变为大写_python如何把小写字母变成大写字母

    python为我们提供了 upper 方法 该方法可以将字符串中的小写字母转为大写字母 语法 str upper 返回值 返回小写字母转为大写字母的字符串 代码示例 usr bin python str this is string exa
  • zxing 二维码扫描优化

    先罗列优化点 1 优化扫描精度 增加解析成功率 hints put DecodeHintType TRY HARDER Boolean TRUE 2 生成图片 用于被解析 时不剪切图片 增加二维码图片的完整性 优化前 new PlanarY
  • js上拉加载更多

    感谢原作者
  • Unity3D相关知识点笔记汇总

    这篇文章将作为一些平时的小知识点笔记来记录 如果有错误望指出来 也欢迎大家在评论底下分享你们的笔记 1 检测点击或者触摸到UI public static bool CheckClickUI bool isClickUI false if
  • 医疗信息管理系统数据库--MySQL

    医疗信息管理系统数据库 MySQL 友情连接 1 学生成绩管理系统数据库设计 MySQL 2 邮件管理数据库设计 MySQL 3 点餐系统数据库设计 SQL Server 4 商品管理系统数据库设计 SQL Server 5 SQL Ser
  • 在WebView中对第三方H5页面的文本密码框添加自定义随机键盘

    前言 首先介绍一下这个需求的背景 由于公司是涉及到金融行业的需要与银行对接资金存管 出于保密性这里不直接列出公司名字和银行名字 从2018年国家对金融行业大整改以来 为了能够顺利通过备案 我们也跟着政府的脚步一步一步走向合规 好了 大致就是
  • 堡垒机-jumpserver环境搭建

    一 Jumpserver简单介绍 Jumpserver 是全球首款完全开源的堡垒机 使用 GNU GPL v2 0 开源协议 是符合 4A 的专业运维审计系统 Jumpserver 使用 Python Django 进行开发 遵循 Web
  • c语言链式栈课程设计,C语言实现链式栈(LinkStack)

    使用单链表来实现 push pop均在链表头部进行 linkStack h ifndef LINK STACK H define LINK STACK H include include include include typedef vo
  • 加密数字货币的开发技术介绍

    要问当前所有区块链应用中最火的是什么应用 非加密货币莫属 看看各个跟区块链相关的讨论组 整天热火朝天地讨论的是各种币的行情 即使是技术讨论组 除了一些热门讨论外 最吸引注意的莫过于本币的涨跌还有各种代币的ICO了 首先 加密数字货币是什么鬼
  • position absolute相关知识点

    前言 最近再看position相关知识点 发现有许多以前没有注意到的细节知识点 有不小的收获 本文就position absolute使用详细分析下 具体分析 position是CSS中比较重要的一个属性 常用于页面布局 它的值有4个 st
  • oracle数据库与postgre数据库之间的互相迁移

    oracle与postgre之间互相迁移之前要明白 postgreSQL中默认使用小写 oracleSQL中默认大写 迁移分成3个步骤 数据及结构迁移 迁移之后的类型及长度变化 不兼容的函数替换 1 数据及结构迁移 1 1数据大小写同步 o
  • JS 判断对象中是否包含某属性

    一 通过点或者方括号 我们在使用对象的时候 通过点或方括号可以获取对象的属性值 如果该对象自身不存在这个属性 就会返回undefined var obj name 小破船 doWhat 借箭 console log obj name 小破船
  • css linear-gradient 设置背景颜色渐变

    CSS3 渐变能够让背景颜色在两个或多个颜色之间平滑过渡 基本语法 background linear gradient direction color stop1 color stop2 direction 是指渐变的方向 color s
  • 迷宫问题寻宝(c++实现,求最短路径,显示路径)

    定义一个二维数组 int maze n m 它表示一个迷宫 其中的1表示道路不通 0表示可以走的路 3 表示宝藏 只能横着走或竖着走 不能斜着走 要求编程序找出找到宝藏的最短路路径 题目保证有解且只有一个最短路径 且只能从迷宫边缘进入迷宫