走迷宫(maze) 难度**

题目描述

有一个 m×n 格的迷宫(表示有 m 行、n 列),其中有可走的也有不可走的,如果用 11 表示可以走,00 表示不可以走。

文件读入这 m×n 个数据和起 始点、结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和列号)。

现在要你编程找出所有可行的道路,要求所走的路中没有重复的点,走时只能是上下左右四个方向。如果一条路都不可行,则输出相应 信息(用-l表示无路)。

输入格式

第一行是两个数 m,n(1< m,n <15),接下来是 m 行 n 列由 1 和 0 组成的数据,最后两行是起始点和结束点。

输出格式

所有可行的路径,描述一个点时用 (x,y)的形式,除开始点外,其他的都要用 “一>” 表示方向。 如果没有一条可行的路则输出 -1 。

样例

样例输入

5 6
1 0 0 1 0 1
1 1 1 1 1 1
0 0 1 1 1 0
1 1 1 1 1 0
1 1 1 0 1 1
1 1
5 6

样例输出

(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(3,4)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(3,4)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)

来源

搜索

#include<bits/stdc++.h>
using namespace std;
int m,n,a[20][20],endx,endy;
bool no=true;
int dx[4]={0,-1,1,0},dy[4]={-1,0,0,1};
struct Route{int x,y;
}route[5001];
void DFS(int x,int y,int num){if(x==endx&&y==endy){for(int i=0;i<num;i++){cout<<"("<<route[i].x<<","<<route[i].y<<")->";}cout<<"("<<x<<","<<y<<")"<<endl;no=false;return;}route[num].x=x,route[num].y=y;for(int i=0;i<4;i++){if(a[x+dx[i]][y+dy[i]]==1 && 1<=x+dx[i]<=m && 1<=y+dy[i]<=n){a[x][y]=0;DFS(x+dx[i],y+dy[i],num+1);a[x][y]=1;}}
}
int main(){while(cin>>m>>n){for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){cin>>a[i][j];}}int sx,sy;cin>>sx>>sy;cin>>endx>>endy;DFS(sx,sy,0);if(no) printf("-1\n");}return 0;
}

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

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

相关文章

地下迷宫

import java.util.*;/*** 题目大意:n*m格迷宫,1代表青蛙可以通过,0不能通过* 青蛙体力值P,每次走一步,横向走消耗体力值1,向下走不消耗体力,* 向上走消耗体力值3.* 青蛙初始位置(0,0),迷宫出口(0,m-1)* 求青蛙走出迷宫的路径*/ public class Main {static class Node {int x;in…

7-2 地下迷宫探索

7-2 地下迷宫探索 分数 30 全屏浏览题目 切换布局 作者 DS课程组 单位 浙江大学 地道战是在抗日战争时期&#xff0c;在华北平原上抗日军民利用地道打击日本侵略者的作战方式。地道网是房连房、街连街、村连村的地下工事&#xff0c;如下图所示。 我们在回顾前辈们艰苦卓绝…

走迷宫图解

本节利用栈的思想用试探法进行了迷宫一条路径的探索。其中主要的操作是找到下一个空格、如果空格不再可行退回上一个格、每走过一个格子将走过的格子标记为-1防止循环走。 原理如下图&#xff1a; 具体的代码如下&#xff1a; #走一个任意的5*5迷宫 #mg可以为[[1,1,1,1,1,1],…

C/C++编程:获取路径中的文件名

文件是否存在 bool fileExists(const char *fileName) {ifstream infile(fileName);return infile.good(); }C/C获取路径中的文件名 void getfilename(const char *filename, char *name)//从完整路径名中解析出文件名称&#xff0c;例如&#xff1a;/home/test/abc.txt,解析…

Linux C 文件路径中获取文件名及路径

编程中有时会遇到需要把文件路径中的文件名或者路径提取出来的情况&#xff0c;发现了两个好用的函数记录一下。 一、提取文件名 头文件&#xff1a;#include <libgen.h> **函数&#xff1a;**char *basename(char *path); 注&#xff1a;这个函数不会修改传入的 path …

从路径名中得到文件名 MFC

从路径名中得到文件名 MFC 转载▼ strFileNamestrPathName.Mid(strPathName.ReverseFind( \\ )1); //若去掉.txt .exe .doc等后缀&#xff0c;共4个字符 strFileNamestrPathName.Mid(strPathName.ReverseFind( \\ )1&#xff0c;strPathName.length()-4); CString CFile…

C++读取特定路径下文件目录及文件名称

C读取特定路径下文件目录及文件名称亲测有效。主要用到了以下几个头文件(类)&#xff1a;io.h&#xff0c;fstream&#xff0c;string&#xff0c;vector 1、读取某给定路径下所有文件夹与文件名称&#xff0c;并带完整路径。代码如下&#xff1a; 1 void getAllFiles(string…

C++读取文件夹中文件名以及文件路径

文章目录 1 获取文件夹中所有文件名&#xff0c;包含子文件夹中的文件名2 获取文件夹中所有文件路径&#xff0c;包含子文件夹中的文件路径3 获取母文件夹中所有文件名&#xff0c;不包含子文件夹中的文件名4 只获取母文件夹中的文件路径&#xff0c;不包含子文件夹中的文件5 主…

C++ 获取文件路径和文件名

C 获取文件路径和文件名 就是基本的字符串截取 const char * filePath“F:\a.txt”; string filePath_strfilePath; string fileNamefilePath_str.substr(filePath.find_last_of(’\\’)1); const char *filename_cfileName.c_str(); ** 1. string 转换 成 const char *…

如何设置打印机?

1.取消禁用Guest用户&#xff0c;因为别人要访问安装打印机的按个电脑就是以guest账户访问的。 点击【开始】按钮&#xff0c;在【计算机】上右键&#xff0c;选择【管理】&#xff0c;如下图所示&#xff1a; 在弹出的【计算机管理】窗口中找到【Guest】用户 双击【Guest】&am…

Epson 打印机设置

在新到的 680 的打印机打印新的电费收据&#xff0c; 驱动选择 Windows 自带的 1600k 驱动&#xff1b;后进连打&#xff0c;左边卡位在 4 处。 一、 问题现象 如果您&#xff08;比如使用了进纸旋钮调整页顶位置之后&#xff0c;或者在使用专用软件打印套打票据的时候&a…

Excel的公式和函数

目录 运算符 地址的引用 逻辑函数 文本函数 统计函数 查找与引用函数 日期函数 常见出错信息 一、运算符 算术运算符 若要进行基本的数学运算&#xff08;如加法、减法、乘法或除法&#xff09;、合并数字以及生成数值结果&#xff0c;请使用以下算术运算符。 比较运算符 可以使…

excel 数据计算

简单计算&#xff1a; 算销售额&#xff0c;B2*C2&#xff0c;右下双击填充下面的 计算 D2&#xff1a;D6 到 D7 函数计算 日期计算 DATEDIF(start,date,end_date,unit) 返回两个日期之间的年/月/日间隔数 unit&#xff1a;有 Y&#xff1a;指时间段中的整年数 M&#xff1…

计算机二级MS office之excel常用函数

总结一下计算机二级excel中常用的函数&#xff0c;如果有错误的地方&#xff0c;希望小伙伴们可以多多指教❤️。 本文主要介绍了以下函数(可根据序号进行查阅)&#xff1a; 序号函数名称函数类别1VLOOKUP查询函数2MID、 LEFT、RIGHT文本函数3LOOKUP数组查询函数4RANK排名函数…

[Excel函数] 计算统计类函数

Excel公式规范: (1) 在Excel中输入函数时&#xff0c;是不区分大小写的 (2) 在公式函数中&#xff0c;每个参数都是用逗号分隔的 (3) 参数中的文本要用双引号引起来&#xff0c;对于单纯的数字是不用双引号的 (4) 一定要在英文半角状态下输入标点符号&#xff0c;不能在中文状态…

Chrome浏览器导出插件并安装到其他电脑浏览器上的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Excel计算函数(计算机二级)

Excel计算函数 一、Sum()求和函数1.sum()2.sumif()3.sumifs() 二、Average()求平均值函数三、Max()求最大值函数四、Min()求最小值函数五、Count()求最个数函数1.count()2.counta()3.countif()4.countifs() 六、if()函数七、rank()排名函数 一、Sum()求和函数 1.sum() 双击底下…

【雕爷学编程】Arduino动手做(24)---水位传感器模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

哪些思维方式是你刻意训练过的?

1.管理记忆 2.贴好标签 3.放大苦难 4.绝对理性 5.自以为是 6.调整尺度 7.等价交换 8.断舍离 脑子只要醒着就不停转 18岁左右开始刻意培养自己的各种思维方式 至今6年了 1. 管理自己的脑海 有效的记忆容量是有限的 所以需要管理 更需要合适的记忆结构去管理 很多人会…

电台飞哥美食日记:三顾冒菜,一辈子最难忘的冒菜!

电台飞哥美食日记&#xff1a;三顾冒菜&#xff0c;一辈子最难忘的冒菜&#xff01; 今天&#xff08;2014年9月5日&#xff09;中午&#xff0c;成都交通广播电台《飞哥欢乐派&#xff08;FM 91.4&#xff09;》、成都电视台《吃喝玩乐全接触》的超人气主持人、成都餐饮同业公…