迷宫问题

挑战ACM迷宫 题目描述如下图所示的是一个由程序设计题目组成的ACM迷宫。迷宫的左上角是入口,右下角是出口。迷宫中每一个格子都有一个程序设计题目,挑战者要AC该题目后才能通过,大于0的数字表示AC该题目所需的最短时间。数字如果是0表示是陷阱,进去了就出不来。现在的问题是:求挑战者从入口到出口所需的最短时间。输入有多组测试实例。对于每组测试实例,先输入一个数字n(1<n<=100),然后输入n*n个数字... 阅读详情

下图给出了一个迷宫的平面图,其中标记为1 的为障碍,标记为0 的为可以通行的地方。

010000
000100
001001
110000

迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到它的上、下、左、右四个方向之一。
对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,
一共10 步。其中D、U、L、R 分别表示向下、向上、向左、向右走。
对于下面这个更复杂的迷宫(30 行50 列),请找出一种通过迷宫的方式,
其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。
请注意在字典序中D<L<R<U。

输入:
01010101001011001001010110010110100100001000101010
00001000100000101010010000100000001001100110100101
01111011010010001000001101001011100011000000010000
01000000001010100011010000101000001010101011001011
00011111000000101000010010100010100000101100000000
11001000110101000010101100011010011010101011110111
00011011010101001001001010000001000101001110000000
10100000101000100110101010111110011000010000111010
00111000001010100001100010000001000101001100001001
11000110100001110010001001010101010101010001101000
00010000100100000101001010101110100010101010000101
11100100101001001000010000010101010100100100010100
00000010000000101011001111010001100000101010100011
10101010011100001000011000010110011110110100001000
10101010100001101010100101000010100000111011101001
10000000101100010000101100101101001011100000000100
10101001000000010100100001000100000100011110101001
00101001010101101001010100011010101101110000110101
11001010000100001100000010100101000001000111000010
00001000110000110101101000000100101001001000011101
10100101000101000000001110110010110101101010100001
00101000010000110101010000100010001001000100010101
10100001000110010001000010101001010101011111010010
00000100101000000110010100101001000001000000000010
11010000001001110111001001000011101001011011101000
00000110100010001000100000001000011101000000110011
10101000101000100010001111100010101001010000001000
10000010100101001010110000000100101010001011101000
00111100001000010000000110111000000001000000001011
10000001100111010111010001000110111010101101111000

#include <bits/stdc++.h>
using namespace std;

int vis[50][100];
int a[50][100];//存储迷宫图 
string ss;
int minn=9999999;
int b[5]={0,1,0,0,-1},c[5]={0,0,-1,1,0};
char s[10];
int vv[2000];
int dp[50][100];//存储走到(i,j)点的最小步数,动规思想 

void dfs(int x,int y,int steps)
{
	if(steps>minn)	return;//当前步数已经大于最小步数,返回 
	if(x==30&&y==50)//到达终点 
	{
		if(steps<minn)//如果步数小于最小步数,更新 
		{
			minn=steps;
			string temp;
			for(int i=1;i<=steps-1;i++)//记录路径 
				temp+=s[vv[i]];
			ss=temp;	
		}
		return;
	}
	for(int i=1;i<=4;i++)
	{
		int nx=x+b[i],ny=y+c[i];
		if(nx<1||ny<1||nx>30||ny>50)	continue;
		if(a[nx][ny]==1||vis[nx][ny])	continue;
		if(steps+1>dp[nx][ny])		return;//如果当前步数大于走到(nx,ny)点的历史最短步数,返回 
		dp[nx][ny]=steps+1;
		vv[steps]=i;//存储当前步的状态(DRUL) 
		vis[nx][ny]=1;//标记该点已经走过 
		dfs(nx,ny,steps+1);//继续深搜 
		vis[nx][ny]=0;//消除标记 
	}
}
int main()
{
	for(int i=0;i<=40;i++)
	{
		for(int j=1;j<=60;j++)
			dp[i][j]=9999999;//初始化 
	}
	for(int i=1;i<=30;i++)
	{
		for(int j=1;j<=50;j++)
		{
			a[i][j]=(getchar()-'0');//输入迷宫图 
		}
		getchar();//吃掉回车 
	}
	s[1]='D',s[2]='L',s[3]='R',s[4]='U';
	vis[1][1]=1;//记得起点标记 
	dfs(1,1,1);
	cout<<ss;
}
【C数据结构】迷宫问题 文章目录一、迷宫问题的思路二、简单迷宫的代码实现三、地下迷宫问题的思路四、地下迷宫的代码实现 前言:本章记录作者学习中,遇到的两个比较有趣的问题,一个简单和一个较复杂的迷宫问题。     一、迷宫问题的思路 让我们先来看简单的:迷宫问题 它的具体要求: 输入描述: 输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。 如 5 5 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 阅读详情

相关推荐

C语言求解迷宫问题

迷宫问题求解 https://www.nowcoder.com/questionTerminal/cf24906056f4488c9ddb132f317e03bc 以上迷宫OJ题曾经是百度某一年的其中一个笔试题, 迷宫问题本质就是一个图的遍历问题,从起点开始不断四个方向探索,直到走到出口, 走的过程中我们借助栈记录走过路径的坐标,栈记录坐标有两方面的作用, 一方面是记录走过的路径,一方面方便走到死路时进行回溯找其他的通路。 输入两个整数,分别表示二维数组的行数,列数。 再输入相应的数组,其中的1表示墙壁,

evoke_c的博客 9466

第十届蓝桥杯E题 迷宫问题

【问题描述】 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、...

rekkles233的博客 2448

栈的应用 —— 迷宫问题

题目 这是几个由二维数组构成的迷宫,简单的迷宫,多通路不带环的迷宫,多通路带环的迷宫!对于简单迷宫我们需要判断是否有出口!对于多通路不带环的迷宫我们需要确定出口并且判断最短路径,对于通路间带环的迷宫我们需要找出最短路径! 算法思想:回溯 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜...

一枚野生程序员 —— Tim 3万+

挑战ACM迷宫 DFS+剪枝 BFS

题目描述 如下图所示的是一个由程序设计题目组成的ACM迷宫。迷宫的左上角是入口,右下角是出口。迷宫中每一个格子都有一个程序设计题目,挑战者要AC该题目后才能通过,大于0的数字表示AC该题目所需的最短时间。数字如果是0表示是陷阱,进去了就出不来。现在的问题是:求挑战者从入口到出口所需的最短时间。 输入 有多组测试实例。 对于每组测试实例,先输入一个

深海沧澜的博客 1160

用栈实现迷宫问题

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define MAXSIZE 500 //栈最大的容量 #define MAXLENGTH 20//设置最大的行和列是20 20*20 typedef struct{ int x; int y; }PosType;//PosType 坐标类型的变量PosType typedef struct { int ord;//用于存放路线 PosTy

weixin_45613730的博客 4249

求解迷宫问题(队列)

目录 算法描述 用一个队列q来存储记录走过的坐标 经过多次记录后: 对应的迷宫路径示意图如下: 则读出来的迷宫路径坐标如下: 我们开始敲代码吧: 代码部分 准备工作: 1. 建立迷宫 **//对应的数组下标 0 1 2 3 4 5 6 7 8 9** int a[][10]={ 1,1,1,1,1,1,1,1,1,1, 1,-1,1,0,0,0,1,1,1,1,//起点为-1 ...

Nothing_Wzy的博客 6036

广度优先搜索 基础例题合集

高桥买酒 #include<iostream> #include<queue> using namespace std; char map[501][501]; int n,m; int flag=1; int vis[501][501]={0}; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; //上 下 左 右 struct node{ int x;int y; }; void bfs(int x,int y){ queue

dx666888999的博客 829

java实现迷宫问题

迷宫问题 对于走迷宫,人们提出过很多计算机上的解法。深度优先搜索、广度优先搜索是使用最广的方法。生活中,人们更 愿意使用“紧贴墙壁,靠右行走”的简单规则。 58 下面的代码则采用了另一种不同的解法。它把走迷宫的过程比做“染色过程”。 假设入口点被染为红色,它的颜色会“传染”给与它相邻的可走的单元。 这个过程不断进行下去,如果最终出口点被染色,则迷宫有解。 仔细分析代码中的逻辑,填充缺少的部分。把填...

南 墙 1万+

试题 D: 迷宫

试题 D: 迷宫 本题总分:10 分 【问题描述】 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(30 行 50 列),请找出一种通过迷宫

韩绘锦的博客 1356

回溯法解决迷宫问题

迷宫问题,是一个非常经典的问题,我们通过栈这种数据结构来解决这个问题。1.设计思路我们这里采用回溯法解决迷宫问题,即从入口出发,顺某一方向试探,若能走通,则继续往前走,否则原路返回,换另一个方向继续试探,直至走出去为止。2.剖析实例例如,我们给定下面这样的迷宫:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1

宇哲 7291

用栈和递归求解迷宫问题

一、问题概述 小时候,我们都玩过走迷宫的游戏吧。看一下这个图例: 遇到这种问题时,我们第一反应都会先找到迷宫的入口点,然后对上下左右四个方向进行寻迹,  检测当前位置是否是通路,是否可以通过,直至找到出口位置,才是迷宫的正确轨迹。如若走到死胡  同里,则必须返回重新选择路径走。  我们来模拟一下迷宫问题,我们的迷宫是这样的: 哈哈~虽然有点low!但是可以帮助我们解决实

xxpresent的博客 1万+

用C语言解决迷宫问题

迷宫问题是栈这一块很经典的问题。 迷宫大致可分为三种,简单迷宫、多通路迷宫:通路间不带环、多通路迷宫:通路间带环,其中带环多通路迷宫是最复杂的,解决它,要把栈与递归结合起来,下来我们来一个一个分析吧,先从简单迷宫开始。 简单迷宫 要解决这个问题并不难,我们只要从入口进入,当然要先检测这个入口是不是合法并且能不能走的通,如果走的通,把当前这一步的位置入栈,并且把它标记为2,然后继续向当前这...

Calm的博客 5万+

STM32CubeMX 6.4.0 + STM32F407ZGT6 实战:基于YT8512C PHY的lwIP以太网配置与调试

本文详细介绍了使用STM32CubeMX 6.4.0为STM32F407ZGT6微控制器配置YT8512C PHY芯片,并成功移植lwIP以太网协议栈的实战过程。文章从硬件差异分析入手,逐步讲解时钟配置、ETH外设设置、PHY寄存器适配以及lwIP协议栈剪裁等关键步骤,旨在帮助开发者解决非标准PHY芯片的联网难题,最终实现网络连通与Ping测试。

n8m7b6v5c4的博客 592

迷宫问题,迷宫最优路径——(C语言)

定义一个二维数组 N*M ,如 5 × 5 数组下所示:它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从的路线。入口点为[0,0],既第一格是可以走的路。数据范围: 2≤n,m≤10 2≤n,m≤10 , 输入的内容只包含 0≤val≤1。

2401_83456040的博客 2780

深交所 vs 上交所:Level-2实时数据推送规则详解与策略适配指南

本文深度解析沪深Level-2实时数据推送规则的关键差异,包括逐笔成交、逐笔委托和10档行情接口的处理逻辑。针对高频交易策略,详细对比上交所与深交所在数据推送机制、时间戳处理及委托队列解析等方面的差异,并提供具体的策略适配方案和性能优化建议,帮助量化投资者提升跨市场交易稳定性。

weixin_27310417的博客 1162

深度学习(Deep Learning, DL)简介

深度学习(Deep Learning, DL)是机器学习的一个子领域,主要使用多层神经网络来处理复杂的数据和任务。深度学习通过模拟人脑的神经网络结构,能够自动提取特征并进行高效的模式识别和预测。

qq_28791753的博客 1万+

【算法】迷宫问题

迷宫问题本质就是一个图的遍历问题,从起点开始不断四个方向探索,直到走到出口,走的过程中我们借助栈记录走过路径的坐标。栈记录坐标有两方面的作用,一方面是记录走过的路径,一方面方便走到死路时进行回溯找其他的通路。

chuxinchangcun的博客 4224

【程序化天空盒】过程记录01:日月 天空渐变 大气散射

在做一个仿照原神的天空盒,写文章作为技术总结和记录。

qq_41835314的博客 6739

迷宫问题详解

迷宫问题详解 迷宫问题指的是:在给定区域内,找到一条甚至所有从某个位置到另一个位置的移动路线。举个简单的例子,如图 1 所示,在白色区域内找到一条(甚至所有)从起点到终点的路线。 图 1 迷宫问题 迷宫问题就可以采用回溯算法解决,即从起点开始,采用不断“回溯”的方式逐一试探所有的移动路线,最终找到可以到达终点的路线。 回溯算法解决迷宫问题 以图 1 所示的迷宫为例,回溯算法解决此问题的具体思路是: 从当前位置开始,分别判断是否可以向 4 个方向(上、下、左、右)移动: 选择一个方向并移动到下个位置。判断此

ccc369639963的博客 2628

SDIO协议

SDIO协议1 概述  SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容(向前兼容)。③与SD存储卡规格版本2.0全兼容。④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4

Let the development board fly! 3万+

unity6000.0.3版本URP下ScriptableRendererFeature如何实现一张自定义贴图效果?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 583

DFS递归之迷宫问题

DFS递归之迷宫问题: 1.能否逃出迷宫; 2.逃出迷宫的最短路径; 3.缺口迷宫。

Tom的博客 4977

冲压机器人系列编程:ABB IRB 6700_(6).RAPID编程语言入门

主菜单:包含文件、编辑、视图、工具等常用操作。项目浏览器:显示当前项目的文件结构,包括机器人模型、程序模块等。图形界面:用于创建和编辑机器人的虚拟环境。RAPID代码编辑器:用于编写和编辑RAPID代码。仿真控制面板:用于控制仿真过程,包括启动、暂停、停止等。变量是存储数据的容器,可以通过变量名访问和修改其存储的数据。变量定义时需要指定其类型和名称。% 定义一个整数变量并赋初值% 定义一个实数变量,未赋初值函数定义时需要指定其返回类型和参数。num result;子程序类似于函数,但不返回值。

zhubeibei168的博客 1377

迷宫问题解法汇总

from:http://www.cnblogs.com/rollenholt/archive/2011/08/23/2151202.html java写的回溯法求迷宫问题 问题描述: [实验目的] 综合运用数组、递归等数据结构知识,掌握、提高分析、设计、实现及测试程序的综合能力。 [实验内容及要求] 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程

basycai的博客 1万+

SAP物料主数据归档详解(物理删除)

顾问们的回答肯定的统一的不能,只能打上删除标记。物料设置好需要删除的物料号这里我们需要删除的物料是AG88,其中,若不选“考虑无删除标记的物料”,需要将需要归档的物料MM06打删除标记。平时在操作系统过程中经常会不小心创建出很多无用的物料主数据,但是系统只能通过MM06打上删除标记,但是物料最终在系统中还是可以查询到的。6、执行已设置变式的归档程序,执行完毕,点下图中的“Job”,每次执行完归档程序会产生两条作业。然后设置好开始的参数和假脱机的参数,三个都是绿灯就可以执行归档的操作,物理上删除物料主数据。

我小时候很黑的博客 5523

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 用数组模拟整数的阶乘
下一篇: C++/C常用函数搜集
_Sincerely
博客等级 码龄8年 63粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值