3. 迷宫问题

news2025/2/22 0:36:36

题目

迷宫有一个入口,一个出口。一个人从入口走进迷宫,目标是找到出口。阴影部分和迷宫的外框为墙,每一步走一格,每格有四个可走的方向,探索顺序为地图方向:南(下)、东(右)、北(上)、西(左)。

输入:输入迷宫数组。第一行数据表示一个 n*n (n<=100)的迷宫;第二行开始的n行为迷宫数据。
其中:0表示路,1表示墙,起点在左上角 <1,1> 的位置,终点在右下角 <n,n> 的位置。

输出:若有解,输出从入口到出口的一条路径,否则输出 there is no solution!

例(上图所示的迷宫数组)

输入:
4 4
0 0 1 0
0 1 0 1
0 0 0 0
0 1 0 0

输出:<1,1> <2,1> <3,1> <3,2> <3,3> <4,3> <4,4>

 测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 4 4↵
  2. 0 0 1 0↵
  3. 0 1 0 1↵
  4. 0 0 0 0↵
  5. 0 1 0 0↵
以文本方式显示
  1. <1,1> <2,1> <3,1> <3,2> <3,3> <4,3> <4,4> ↵
1秒64M0
测试用例 2以文本方式显示
  1. 4 4↵
  2. 0 0 1 0↵
  3. 1 0 1 1↵
  4. 0 0 0 1↵
  5. 0 1 0 1↵
以文本方式显示
  1. There is no solution!↵
1秒64M0

C++代码 

#include <iostream>
#include <vector>
#include <stack>

using namespace std;

const int MAX_N = 100;
int maze[MAX_N][MAX_N]; // 定义迷宫数组
bool visited[MAX_N][MAX_N]; // 记录访问过的位置
int n; // 迷宫大小
int dx[4] = { 1, 0, -1, 0 }; // 南、东、北、西的移动方向
int dy[4] = { 0, 1, 0, -1 }; // 南、东、北、西的移动方向

struct Point {
    int x, y;
    Point(int x, int y) : x(x), y(y) {}
};

// 检查当前位置是否可以访问
bool isValid(int x, int y) {
    return (x >= 0 && x < n && y >= 0 && y < n && maze[x][y] == 0 && !visited[x][y]);
}

// 深度优先搜索函数,寻找从起点到终点的路径
bool dfs(int x, int y, vector<Point>& path) {
    if (x == n - 1 && y == n - 1) { // 检查是否到达终点
        path.push_back(Point(x + 1, y + 1)); // 调整为1索引输出
        return true;
    }

    visited[x][y] = true; // 标记当前位置为已访问

    for (int i = 0; i < 4; ++i) {
        int nx = x + dx[i];
        int ny = y + dy[i];

        if (isValid(nx, ny)) {
            path.push_back(Point(x + 1, y + 1)); // 调整为1索引输出
            if (dfs(nx, ny, path)) {
                return true;
            }
            path.pop_back();
        }
    }

    return false;
}

int main() {
    cin >> n>>n; // 输入迷宫大小
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> maze[i][j]; // 输入迷宫数据
        }
    }

    vector<Point> path;
    if (dfs(0, 0, path)) { // 调用深度优先搜索
        for (const Point& p : path) {
            cout << "<" << p.x << "," << p.y << "> "; // 输出路径
        }
        cout << endl;
    }
    else {
        cout << "There is no solution!" << endl; // 输出无解
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1254689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring整合MyBatis】Spring整合MyBatis的具体方法

在前面写的博客中&#xff0c;介绍了MyBatis通过配置方式和通过注解方式写的方法&#xff1a; 【Spring集成MyBatis】MyBatis诞生及代码快速入门&#xff08;非注解开发&#xff09;【Spring集成MyBatis】MyBatis的Dao层实现&#xff08;基于配置&#xff0c;非注解开发&#…

【libGDX】立方体手动旋转

1 前言 本文主要介绍使用 libGDX 绘制立方体&#xff0c;并实现手动触摸事件控制立方体旋转。 为方便控制触摸旋转&#xff0c;并提高渲染性能&#xff0c;我们通过改变相机的位置和姿态实现立方体旋转效果。 读者如果对 libGDX 不太熟悉&#xff0c;请回顾以下内容。 使用Me…

Re55:读论文 Entities as Experts: Sparse Memory Access with Entity Supervision

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称&#xff1a;Entities as Experts: Sparse Memory Access with Entity Supervision 模型名称&#xff1a;Entities as Experts (EaE) ArXiv网址&#xff1a;https://arxiv.org/abs/2004.07202 本文…

轻松实现文件按数量平均分类,高效整理并自动新建文件夹保存“

你是否曾经因为文件数量过多&#xff0c;整理起来繁琐而感到烦恼&#xff1f;是否曾经为了新建文件夹而手动一个一个进行创建&#xff0c;费时又费力&#xff1f;现在&#xff0c;我们的智能文件管理工具将为你解决这些问题&#xff01; 首先第一步&#xff0c;我们要进入文件…

超详细csapp-linklab之第一阶段“输出学号”实验报告

该实验的主题是“链接”。 准备工具 虚拟机&#xff0c;Ubuntu32位&#xff0c;hexedit&#xff0c;main.o&#xff0c;phase1.o&#xff0c;该实验的C代码框架如下 // main.c void (*phase)(); /*初始化为0*/int main( int argc, const char* argv[] ) {if ( phase )(*ph…

小程序项目:springboot+vue基本微信小程序的宠物领养系统

项目介绍 当今科技发展迅速&#xff0c;交通环境也变得越来越复杂。人们的出行方式变得多元化&#xff0c;这给视障人士带来了一定的困扰。而导盲犬可以帮助视障人士外出行走&#xff0c;提高他们的生活质量。在我国&#xff0c;导盲犬的数量远远少于视障人士的数量。由于导盲…

FreeRTOS深入教程(中断管理)

文章目录 前言一、为什么要为中断设计一套API二、两套函数区别对比三、两类中断四、FreeRTOS中SYSTICK和PendSV中断的作用总结 前言 本篇文章来分析FreeRTOS中的中断&#xff0c;中断在FreeRTOS中也是非常重要的&#xff0c;那么这篇文章将带大家来学习一下FreeRTOS中的中断处…

文件搜索工具HoudahSpot mac中文版特点

HoudahSpot mac是一款文件搜索工具&#xff0c;它可以帮助用户快速准确地找到文件和文件夹&#xff0c;支持高级搜索和过滤&#xff0c;同时提供了多种视图和操作选项&#xff0c;方便用户进行文件管理和整理。 HoudahSpot mac软件特点 高级搜索和过滤功能&#xff1a;软件支持…

[pyqt5]pyqt5设置窗口背景图片后上面所有图片都会变成和背景图片一样

pyqt5的控件所有都是集成widget&#xff0c;窗体设置背景图片后控件背景也会跟着改变&#xff0c;此时有2个办法。第一个办法显然我们可以换成其他方式设置窗口背景图片&#xff0c;而不是使用styleSheet样式表&#xff0c;网上有很多其他方法。还有个办法就是仍然用styleSheet…

vsVode C++开发远程虚拟机工程配置

在使用VS Code进行C/C的开发过程中&#xff0c;有三个至关重要的配置文件&#xff0c;分别是 tasks.json, launch.json 和 c_cpp_properties.json 1. tasks.json tasks.json 是在 vscode 中辅助程序编译的模块&#xff0c;可以代你执行类似于在命令行输入 “gcc hello.c -o h…

在mysql存储过程中间部分,使用游标遍历动态结果集(游标动态传参使用)

mysql游标动态传参实现&#xff08;动态游标&#xff09; 1.问题2.需求描述3.实现3.1.使用3.2.代码&#xff08;直接看这都可以&#xff09; 1.问题 众所周知&#xff0c;mysql存储过程功能是没有oracle的包功能强大的&#xff0c;但是在去O的趋势下&#xff0c;mysql存储过程的…

17. Python 数据库操作之MySQL和SQLite实例

目录 1. 简介2. 使用PyMySQL2. 使用SQLite 1. 简介 数据库种类繁多&#xff0c;每种数据库的对外接口实现各不相同&#xff0c;为了方便对数据库进行统一的操作&#xff0c;大部分编程语言都提供了标准化的数据库接口&#xff0c;用户不需要了解每种数据的接口实现细节&#x…

2018年5月23日 Go生态洞察:更新Go行为准则

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

智能优化算法应用:基于蚁狮算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蚁狮算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蚁狮算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蚁狮算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

ElasticSearch学习笔记(狂神说)

ElasticSearch学习笔记&#xff08;狂神说&#xff09; 视频地址&#xff1a;https://www.bilibili.com/video/BV17a4y1x7zq 在学习ElasticSearch之前&#xff0c;先简单了解一下Lucene&#xff1a; Doug Cutting开发是apache软件基金会 jakarta项目组的一个子项目是一个开放…

乘波前行的问题

1.问题&#xff1a; 考虑两个信号叠加在一起&#xff0c;比如&#xff0c;一个是工频信号50Hz&#xff0c;一个是叠加的高频信号比如有3KHz&#xff0c;简单起见&#xff0c;两个信号都是幅值固定的标准的正弦波&#xff0c;现在我们期望得到那个高频信号&#xff0c;相对工频…

Seurat Tutorial 1:标准分析流程,基于 PBMC 3K 数据集

目录 1 设置 Seurat 对象2 标准预处理工作流程 2.1 QC 和选择细胞进行进一步分析3 数据归一化4 识别高变特征&#xff08;特征选择&#xff09;5 标准化数据6 执行线性降维7 确定数据集的维度8 细胞聚类9 运行非线性降维 (UMAP/tSNE)10 寻找差异表达特征&#xff08;cluster b…

数据结构(超详细讲解!!)第二十五节 线索二叉树

1.线索二叉树的定义和结构 问题的提出&#xff1a; 通过遍历二叉树可得到结点的一个线性序列&#xff0c;在线性序列中&#xff0c;很容易求得某个结点的直接前驱和后继。但是在二叉树上只能找到结点的左孩子、右孩子&#xff0c;结点的前驱和后继只有在遍历过程中才能得到…

计算机视觉面试题-02

图像处理和计算机视觉基础 什么是图像滤波&#xff1f;有哪些常见的图像滤波器&#xff1f; 图像滤波是一种通过在图像上应用滤波器&#xff08;卷积核&#xff09;来改变图像外观或提取图像特征的图像处理技术。滤波器通常是一个小的矩阵&#xff0c;通过在图像上进行卷积…

【Linux】第二十站:模拟实现shell

文章目录 一、shell的实现细节1.shell的一些细节2.用户名、主机名、工作目录2.输入命令3.改为循环4.切割字符串5.普通命令的执行6.内建命令的处理7.子进程的退出码8.总结 二、模式实现shell完整代码 一、shell的实现细节 1.shell的一些细节 shell操作系统的一个外壳程序。 s…