洛谷 P1238 走迷宫【搜索】【DFS】
洛谷 P1238 走迷宫
- 一、题目链接
- 二、题目分析
- (一)算法标签
- (二)解题思路
- 三、AC代码
- 四、其它题解
一、题目链接
洛谷 P1238 走迷宫
二、题目分析
(一)算法标签
搜索 DFS
(二)解题思路
三、AC代码
解法一:(DFS)
#include <iostream>
#include <vector>using namespace std;const int N = 15;int n, m;
int g[N][N];
bool st[N][N], has_solution;
int dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0};struct Point {int x, y;
};vector<Point> track; // 存放路径 Point start, dest;istream& operator>> (istream &in, Point &p)
{in >> p.x >> p.y;return in;
}ostream& operator<< (ostream &out, Point &p)
{out << '(' << p.x << ',' << p.y << ')';return out;
}bool operator== (Point &p1, Point &p2)
{return p1.x == p2.x && p1.y == p2.y;
}void printTrack()
{cout << track[0];for (int i = 1; i < track.size(); i ++ )cout << "->"<< track[i];cout << endl;
}void dfs(Point p)
{if (p == dest){has_solution = true;printTrack();return;}for (int i = 0; i < 4; i ++ ){int a = p.x + dx[i], b = p.y + dy[i];if (a < 1 || a > n || b < 1 || b > m) continue;if (g[a][b] == 1 && !st[a][b]){st[a][b] = true;track.push_back({a, b});dfs({a, b});track.pop_back();st[a][b] = false;}}
}
int main()
{ios::sync_with_stdio(false);cin >> n >> m;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )cin >> g[i][j];cin >> start >> dest;// 起点被访问,并放进track st[start.x][start.y] = true;track.push_back(start);dfs(start);if (!has_solution) cout << "-1" << endl;return 0;
}
DFS另一种写法
#include <iostream>using namespace std;const int N = 15;int g[N][N];
bool st[N][N];
int n, m, sx, sy, fx, fy;
int dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0};
bool has_solution;void dfs(int x, int y, string s)
{if (x == fx && y == fy){has_solution = true;cout << s << endl;return;}for (int i = 0; i < 4; i ++ ){int a = x + dx[i], b = y + dy[i];if (a >= 1 && a <= n && b >= 1 && b <= m && !st[a][b] && g[a][b] == 1){st[a][b] = true;dfs(a, b, s + "->(" + to_string(a) + "," + to_string(b) + ")");st[a][b] = false; }}
}
int main()
{cin >> n >> m;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )cin >> g[i][j];cin >> sx >> sy >> fx >> fy;st[sx][sy] = true;dfs(sx, sy, "(" + to_string(sx) + "," + to_string(sy) + ")");if (!has_solution) cout << "-1" << endl;return 0;
}
四、其它题解
洛谷 P1238 走迷宫
洛谷 P1238 走迷宫 2
洛谷 P1238 走迷宫【搜索】【DFS】相关推荐
- 洛谷P1238 走迷宫
走迷宫 题目链接 这道题第一次写的时候写了好久,因为不会写输出qwqwq,于是让某苦力调了两天一个对的程序. 还有这道题需要另外注意的地方是它对顺序有要求,并且一定要分清你的横纵坐标和行列是不一样的. ...
- 编程题走迷宫_洛谷P1238 走迷宫题解
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- 洛谷——P1238 走迷宫
题目描述 有一个m×n 格的迷宫(表示有 m 行.n 列),其中有可走的也有不可走的,如果用 1 表示可以走,0表示不可以走,文件读入这 m×n 个数据和起始点.结束点(起始点和结束点都是用两个数据来 ...
- 洛谷P1363 幻象迷宫(DFS)
输入样例#1: 5 4 ##.# ##S# #-# #.## #-# 5 4 ##.# ##S# #-# -#. #.## 输出样例#1: Yes No 大概就是说给出一个01迷宫类的地图,按照这个地 ...
- 洛谷P1605:迷宫(DFS)
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右 ...
- 伪题解 洛谷 P1363 幻想迷宫(DFS)
毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...
- 洛谷 2921 记忆化搜索 tarjan 基环外向树
洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...
- 洛谷P1074 靶形数独 [搜索]
题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...
- 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess
洛谷 P4363 [九省联考2018]一双木棋chess 题目大意 ◇题目传送门◆ 分析 根据题目所给定的规则,可以发现对于每一行,其下面一行上放的棋子数目不可能多于上面的一行. 所以我们可以将每行上 ...
最新文章
- mysql 报错注入 读文件_SQL注入-读写文件
- Delphi 中的 Var buffer 开类型参数
- Angular应用动态创建style标签页的场景
- android调用照相机拍照获取照片并做简单剪裁
- mysql semi-synchronous_MySQL Semisynchronous Replication介绍
- 直播和VR的代入感太强,淘宝也忍不住推出了VR直播
- php怎么将农历转换成公历,农历公历转换器,公历农历转换
- 智能合约审计之整形溢出攻击
- 数据标准化——scikit-learn
- Python爬虫 之 异步爬虫
- 企业微信oauth认证_微信企业号OAuth2验证接口实例(使用SpringMVC)
- 初二因式分解奥数竞赛题_初中数学因式分解(含答案)竞赛题精选.doc
- kermit使用注意事项
- 如何在html网页里获取 mav.addObject(message,登录名或密码错误,请重新输入)的message
- GB\T和GB国标文件查询、下载方法(建议收藏)
- LeetCode(数据库)- 统计各专业学生人数
- 星期、干支、二十八宿计算公式
- 武汉旅游攻略(部分)
- 3Dmax中obj文件的导入导出(以3Dmax2017版为例)
- Vivado IP核之复数浮点数累加 Floating-point