题目描述

有一个m×n 格的迷宫(表示有 m 行、n 列),其中有可走的也有不可走的,如果用 1 表示可以走,0表示不可以走,文件读入这 m×n 个数据和起始点、结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和列号)。现在要你编程找出所有可行的道路,要求所走的路中没有重复的点,走时只能是上下左右四个方向。如果一条路都不可行,则输出相应信息(用 −1 表示无路)。

优先顺序:左上右下。数据保证随机生成。

输入格式

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

输出格式

所有可行的路径,描述一个点时用 (x,y)的形式,除开始点外,其他的都要用 -> 表示方向。

如果没有一条可行的路则输出 -1。

输入输出样例

输入 #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,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)
(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)->(3,5)->(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)->(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)->(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)->(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)

说明/提示

数据保证随机生成。事实上,如果 n=m=14 且每个位置都是 11 的话,有 69450664761521361664274701548907358996488种路径。

解题方法:DFS + 回溯。

Code:

#include <iostream>
#include <stdio.h>using namespace std;const int N = 5000;const int dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0};int g[N][N], d[N][5];
bool map[N][N];
int n, m, sx, sy, ex, ey, f, ans;void dfs(int x1, int y1)
{if(x1 == ex && y1 == ey){ans ++;cout << '(' << sx << ',' << sy << ')' << "->";for(int i = 0; i < f; i ++ ){if(i != f - 1)  cout << '(' << d[i][0] << ',' << d[i][1] << ')' << "->";else  cout << '(' << d[i][0] << ',' << d[i][1] << ')' << endl;}return ;}for(int i = 0; i < 4; i ++ ){int x = x1 + dx[i], y = y1 + dy[i];if(x >= 1 && x <= n && y >= 1 && y <= m && !map[x][y] && g[x][y] == 1){map[x][y] = true;d[f][0] = x, d[f][1] = y; //记录坐标f ++;dfs(x, y);map[x][y] = false;f --;}}
}signed main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= n; i ++ ){for(int j = 1; j <= m; j ++ )  scanf("%d", &g[i][j]);}scanf("%d%d%d%d", &sx, &sy, &ex, &ey);map[sx][sy] = true; //标记起点dfs(sx, sy);if(ans == 0)  cout << -1 << endl;
}

洛谷——P1238 走迷宫相关推荐

  1. 洛谷 P1238 走迷宫【搜索】【DFS】

    洛谷 P1238 走迷宫 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P1238 走迷宫 二.题目分析 (一)算法标签 搜索 DFS ( ...

  2. 洛谷P1238 走迷宫

    走迷宫 题目链接 这道题第一次写的时候写了好久,因为不会写输出qwqwq,于是让某苦力调了两天一个对的程序. 还有这道题需要另外注意的地方是它对顺序有要求,并且一定要分清你的横纵坐标和行列是不一样的. ...

  3. 编程题走迷宫_洛谷P1238 走迷宫题解

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  4. 2019.03.04【ZJOI2018】【BZOJ5213】【洛谷P4339】迷宫(自动机)(数论)

    BZOJ传送门 洛谷传送门 解析: 这道题本质其实是要最小化一个能够接受所有mmm进制下KKK的倍数的自动机. 显然我们有一个方案就是KKK个节点,iii的第jjj条边向(i∗m+j)%K(i*m+j ...

  5. 洛谷P1363 幻象迷宫(DFS)

    输入样例#1: 5 4 ##.# ##S# #-# #.## #-# 5 4 ##.# ##S# #-# -#. #.## 输出样例#1: Yes No 大概就是说给出一个01迷宫类的地图,按照这个地 ...

  6. 洛谷P1141 01迷宫【记忆化搜索】

    题目链接:P1141 01迷宫 程序说明: 可以用bfs来做,但是数据毒瘤,如果每次询问都运行一次bfs,会有三个TLE..可以将路途经过的点储存起来并且记录答案,如果询问的点已经被记录了答案,直接输 ...

  7. 洛谷P1363幻象迷宫

    问题描述 (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:momo...我们一定能走出去的! WD:嗯,+U+U ...

  8. 洛谷P1605:迷宫(DFS)

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右 ...

  9. 洛谷P1141 01迷宫

    因为各种乱七八糟的原因,学搜索实在是学了太久了也咕了好久博客啊.准备再做一遍之前写过的题顺便补一下博客qwq 01迷宫 [题目链接](https://www.luogu.org/problemnew/ ...

最新文章

  1. 三维地形制作软件 World Machine 基础入门学习教程
  2. OpenSuse Linux 的单用户模式
  3. JAVA写的爬虫小工具
  4. 系统级性能分析工具perf的介绍与使用
  5. jzoj4209-已经没有什么好害怕的了【差分】
  6. linux制作一键恢复,Linux/Centos Mondo 一键部署、镜像恢复,快速部署
  7. 牛客 Bang! Bang!(动态规划)
  8. 洛谷 深基 第4部分 基础数学与数论(19-21课)
  9. 入门机器学习(十七)--编程作业-K-means和PCA(Python实现)
  10. 斜面孔如何绘制_如何才能做好钢结构厂房基础设计
  11. 转正答辩ppt_如何顺利完成转正答辩?
  12. 利用SWT做Java版局域网QQ(一)——基于UDP协议
  13. python 复制图片到剪贴板_Python3把图片复制到剪贴板
  14. Active Learning through label error statistical methods(ALSE)
  15. linux就该这么学【进程地址空间】
  16. 代码随想录第十八天 LeetCode513、112、113、106、105
  17. Linux系统磁盘高级应用适合初学者
  18. linux 防火墙 功能点,功能点(Funciton Point FP)估算法(三) 调整因子
  19. Android音频管理器AudioManager用法
  20. 式创新:移动互联网时代的生存法则 读后感

热门文章

  1. springboot+校园新闻数据化系统-计算机毕设 附源码99293
  2. 关于微信小程序uniapp版的推送消息
  3. android如何查看分区信息,【Android】Android如何查看分区情况
  4. 机器学习实战:Python基于支持向量机SVM-RFE进行分类预测(三)
  5. JavaScript【判断一个数是否是素数】函数实现
  6. 审计署计算机中级考试blog,代码审计篇
  7. Web全栈~31.并发
  8. 负载均衡技术原理浅析
  9. 【Some】【心学】心学精华,人生要旨
  10. React构造函数中为什么要写 super(props)