洛谷——P1238 走迷宫
题目描述
有一个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 走迷宫相关推荐
- 洛谷 P1238 走迷宫【搜索】【DFS】
洛谷 P1238 走迷宫 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 洛谷 P1238 走迷宫 二.题目分析 (一)算法标签 搜索 DFS ( ...
- 洛谷P1238 走迷宫
走迷宫 题目链接 这道题第一次写的时候写了好久,因为不会写输出qwqwq,于是让某苦力调了两天一个对的程序. 还有这道题需要另外注意的地方是它对顺序有要求,并且一定要分清你的横纵坐标和行列是不一样的. ...
- 编程题走迷宫_洛谷P1238 走迷宫题解
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- 2019.03.04【ZJOI2018】【BZOJ5213】【洛谷P4339】迷宫(自动机)(数论)
BZOJ传送门 洛谷传送门 解析: 这道题本质其实是要最小化一个能够接受所有mmm进制下KKK的倍数的自动机. 显然我们有一个方案就是KKK个节点,iii的第jjj条边向(i∗m+j)%K(i*m+j ...
- 洛谷P1363 幻象迷宫(DFS)
输入样例#1: 5 4 ##.# ##S# #-# #.## #-# 5 4 ##.# ##S# #-# -#. #.## 输出样例#1: Yes No 大概就是说给出一个01迷宫类的地图,按照这个地 ...
- 洛谷P1141 01迷宫【记忆化搜索】
题目链接:P1141 01迷宫 程序说明: 可以用bfs来做,但是数据毒瘤,如果每次询问都运行一次bfs,会有三个TLE..可以将路途经过的点储存起来并且记录答案,如果询问的点已经被记录了答案,直接输 ...
- 洛谷P1363幻象迷宫
问题描述 (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:momo...我们一定能走出去的! WD:嗯,+U+U ...
- 洛谷P1605:迷宫(DFS)
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右 ...
- 洛谷P1141 01迷宫
因为各种乱七八糟的原因,学搜索实在是学了太久了也咕了好久博客啊.准备再做一遍之前写过的题顺便补一下博客qwq 01迷宫 [题目链接](https://www.luogu.org/problemnew/ ...
最新文章
- 三维地形制作软件 World Machine 基础入门学习教程
- OpenSuse Linux 的单用户模式
- JAVA写的爬虫小工具
- 系统级性能分析工具perf的介绍与使用
- jzoj4209-已经没有什么好害怕的了【差分】
- linux制作一键恢复,Linux/Centos Mondo 一键部署、镜像恢复,快速部署
- 牛客 Bang! Bang!(动态规划)
- 洛谷 深基 第4部分 基础数学与数论(19-21课)
- 入门机器学习(十七)--编程作业-K-means和PCA(Python实现)
- 斜面孔如何绘制_如何才能做好钢结构厂房基础设计
- 转正答辩ppt_如何顺利完成转正答辩?
- 利用SWT做Java版局域网QQ(一)——基于UDP协议
- python 复制图片到剪贴板_Python3把图片复制到剪贴板
- Active Learning through label error statistical methods(ALSE)
- linux就该这么学【进程地址空间】
- 代码随想录第十八天 LeetCode513、112、113、106、105
- Linux系统磁盘高级应用适合初学者
- linux 防火墙 功能点,功能点(Funciton Point FP)估算法(三) 调整因子
- Android音频管理器AudioManager用法
- 式创新:移动互联网时代的生存法则 读后感