洛谷 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】相关推荐

  1. 洛谷P1238 走迷宫

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

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

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

  3. 洛谷——P1238 走迷宫

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

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

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

  5. 洛谷P1605:迷宫(DFS)

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

  6. 伪题解 洛谷 P1363 幻想迷宫(DFS)

    毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...

  7. 洛谷 2921 记忆化搜索 tarjan 基环外向树

    洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...

  8. 洛谷P1074 靶形数独 [搜索]

    题目传送门 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了 ...

  9. 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess

    洛谷 P4363 [九省联考2018]一双木棋chess 题目大意 ◇题目传送门◆ 分析 根据题目所给定的规则,可以发现对于每一行,其下面一行上放的棋子数目不可能多于上面的一行. 所以我们可以将每行上 ...

最新文章

  1. mysql 报错注入 读文件_SQL注入-读写文件
  2. Delphi 中的 Var buffer 开类型参数
  3. Angular应用动态创建style标签页的场景
  4. android调用照相机拍照获取照片并做简单剪裁
  5. mysql semi-synchronous_MySQL Semisynchronous Replication介绍
  6. 直播和VR的代入感太强,淘宝也忍不住推出了VR直播
  7. php怎么将农历转换成公历,农历公历转换器,公历农历转换
  8. 智能合约审计之整形溢出攻击
  9. 数据标准化——scikit-learn
  10. Python爬虫 之 异步爬虫
  11. 企业微信oauth认证_微信企业号OAuth2验证接口实例(使用SpringMVC)
  12. 初二因式分解奥数竞赛题_初中数学因式分解(含答案)竞赛题精选.doc
  13. kermit使用注意事项
  14. 如何在html网页里获取 mav.addObject(message,登录名或密码错误,请重新输入)的message
  15. GB\T和GB国标文件查询、下载方法(建议收藏)
  16. LeetCode(数据库)- 统计各专业学生人数
  17. 星期、干支、二十八宿计算公式
  18. 武汉旅游攻略(部分)
  19. 3Dmax中obj文件的导入导出(以3Dmax2017版为例)
  20. Vivado IP核之复数浮点数累加 Floating-point

热门文章

  1. 中文字符编码之GBK,UTF-16和UTF-8
  2. 密码学——RSA加密算法
  3. UML设计——网上信用卡管理系统分析与设计(新手)
  4. 文件服务器报502,SFTP文件管理-服务端发生错误502、504
  5. 用于大规模视觉定位的直接2D-3D匹配(IROS 2021)
  6. 无偏估计和最小方差无偏估计简介
  7. ORC科普3-创业小王子Turboden
  8. html模拟百度人物百科,HTML MARC
  9. 西门子S7-200 SMART控制步进电机(三)
  10. JAVA 多个空格分割字符串