迷宫问题寻宝(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++实现,求最短路径,显示路径) 的相关文章

  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • 架构师成长之路|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 表示宝藏 只能横着走或竖着走 不能斜着走 要求编程序找出找到宝藏的最短路路径 题目保证有解且只有一个最短路径 且只能从迷宫边缘进入迷宫