题目链接:https://vjudge.net/problem/POJ-3984

这个题目,emm,上代码,看的估计应该是刚开始接触搜索的,我带点注释,你能慢慢理解。


  1. #include <iostream>
  2. #include <cstring>
  3. #include<vector>
  4. #include<string>
  5. #include <cmath>
  6. #include <map>
  7. #include <queue>
  8. #include <algorithm>
  9. using namespace std;
  10.  
  11. #define inf (1LL << 31) - 1
  12. #define rep(i,j,k) for(int i = (j); i <= (k); i++)
  13. #define rep__(i,j,k) for(int i = (j); i < (k); i++)
  14. #define per(i,j,k) for(int i = (j); i >= (k); i--)
  15. #define per__(i,j,k) for(int i = (j); i > (k); i--)
  16.  
  17. const int N = ;
  18. int mv_x[] = { , , -, }; //(1)
  19. int mv_y[] = { , -, , }; //(2) (1) + (2) 可以表示人的上下左右移动
  20. char mp[N][N]; //地图
  21. bool vis[N][N]; //有没有访问过了
  22.  
  23. struct node{
  24. int x, y;
  25. vector<string> vec;
  26. node(){}
  27. node(int a, int b){
  28. x = a;
  29. y = b;
  30. }
  31. };
  32.  
  33. inline void input(){
  34.  
  35. rep__(i, , ) rep__(j, , ) cin >> mp[i][j];
  36. }
  37.  
  38. //检查有无越界的函数
  39. inline bool check(int x, int y){
  40. return x >= && x <= && y >= && y <= ;
  41. }
  42.  
  43. void fun(string& p){
  44. cout << p << endl;
  45. }
  46.  
  47. void work(){
  48.  
  49. //开始的处理,起点标记
  50. vis[][] = true;
  51. node T(, );
  52. T.vec.push_back("(0, 0)");
  53.  
  54. queue<node> que;
  55. que.push(T);
  56.  
  57. while (!que.empty()){
  58.  
  59. node tmp = que.front();
  60. que.pop();
  61.  
  62. rep__(p, , ){
  63.  
  64. //人的移动
  65. int dx = tmp.x + mv_x[p];
  66. int dy = tmp.y + mv_y[p];
  67.  
  68. //没越界 是可以走的 没访问过
  69. if (check(dx, dy) && mp[dx][dy] == '' && !vis[dx][dy]){
  70. vis[dx][dy] = true; //标记
  71.  
  72. node in = tmp;
  73. in.x = dx;
  74. in.y = dy;
  75. string t = "(x, x)";
  76. t[] = '' + dx;
  77. t[] = '' + dy;
  78. in.vec.push_back(t); //把新的点压入
  79.  
  80. if (dx == && dy == ){ //遇到了出口,输出路线
  81.  
  82. for_each(in.vec.begin(), in.vec.end(), fun);
  83.  
  84. return;
  85. }
  86. que.push(in); //把新的状态压入队列
  87. }
  88. }
  89. }
  90. }
  91.  
  92. int main(){
  93.  
  94. ios::sync_with_stdio(false);
  95. cin.tie();
  96.  
  97. input();
  98. work();
  99.  
  100. return ;
  101. }

kuangbin专题 专题一 简单搜索 迷宫问题 POJ - 3984的更多相关文章

  1. Q - 迷宫问题 POJ - 3984(BFS / DFS + 记录路径)

    Q - 迷宫问题 POJ - 3984 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, ...

  2. 迷宫问题 POJ - 3984 [kuangbin带你飞]专题一 简单搜索

    定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...

  3. kuangbin专题总结一 简单搜索

    A - 棋盘问题:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有 ...

  4. kuangbin专题 专题一 简单搜索 Prime Path POJ - 3126

    题目链接:https://vjudge.net/problem/POJ-3126 题意:给你两个四位的素数N,M,每次改变N四位数中的其中一位,如果能经过有限次数的替换变成四位数M,那么求出最少替换次 ...

  5. kuangbin专题 专题一 简单搜索 Dungeon Master POJ - 2251

    题目链接:https://vjudge.net/problem/POJ-2251 题意:简单的三维地图 思路:直接上代码... #include <iostream> #include & ...

  6. kuangbin专题 专题一 简单搜索 棋盘问题 POJ - 1321

    题目链接:https://vjudge.net/problem/POJ-1321 题意:给一张棋盘,‘#’表示可以下棋的地方,‘.’表示不能下棋的地方.棋盘是n*n的,要求能放下k个棋子,要求k个棋子 ...

  7. 迷宫问题 POJ - 3984 (搜索输出路径)

    题目大意 题目不需要大意,poj居然还有中文题 鸣谢 特别鸣谢ljc大佬提供的方法!!! 解法 我们可能输出个最短路径的长度比较简单,但是输出最短路径真的是没有做过,这里有一种简单的方法 因为我们的d ...

  8. 迷宫问题-POJ 3984

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 24348   Accepted: 14206 Descriptio ...

  9. K - 迷宫问题 POJ - 3984

    定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...

随机推荐

  1. 注册.NET Framework 到IIS服务器

    一.注册.NET 4.0 32位的Windows:--------------------------------------------------------------------------- ...

  2. MyBatis 问题 & 解决

    # 问题 Invalid bound statement (not found) # 解决 <mappers> 标签的包括的是 SQL 语句存在的地方,此外 <mapper> ...

  3. WPF之VirtualizingStackPanel.IsVirtualizing="False"

    原文:WPF之VirtualizingStackPanel.IsVirtualizing="False" 相信从winform转到wpf的人都遇到过这样的困惑,在处理DataGri ...

  4. Win8 Metro(C#)数字图像处理--2.63图像指数增强

    原文:Win8 Metro(C#)数字图像处理--2.63图像指数增强  [函数名称]   指数增强      WriteableBitmap IndexenhanceProcess(Writea ...

  5. 深度学习概述教程--Deep Learning Overview

          引言         深度学习,即Deep Learning,是一种学习算法(Learning algorithm),亦是人工智能领域的一个重要分支.从快速发展到实际应用,短短几年时间里, ...

  6. 【C++】小心使用文件读写模式:回车('\r') 换行('\n')问题的一次纠结经历

    原来没有仔细注意C++读写文件的二进制模式和文本模式,这次吃了大亏.(平台:windows  VS2012) BUG出现: 写了一个程序A,生成一个文本文件F保存在本地,然后用程序B读取此文件计算MD ...

  7. Win10《芒果TV》商店版2016-2017春节大礼,每日前100名用户免费领取7天VIP

    告别2016,喜迎2017,鸡年大吉,春节期间,每天登录Win10<芒果TV>商店版的前100位用户可领取一张芒果TV会员7天体验卡,先到先得. 芒果TV会员权益: 1.全站免广告 2.自 ...

  8. 社会不是承认有学历的人, 而是承认努力过得人, 而且是真正努力过不是穷忙的人(没有学历就要多付出一倍的努力)good

    送你一句 这就是你水平差的理由? 楼主你工资低是因为你技术不行, 不想努力然后怪罪学历, 为什么学历高的混得好, 因为学历高的人努力过, 你没学历技术还不行, 凭什么证明你努力过, 社会不是承认有学历 ...

  9. Qt浅谈之二:钟表(时分秒针)

    一.简介 QT编写的模拟时钟,demo里的时钟只有时针和分针,在其基础上添加了秒针,构成了一个完整的时钟.能对2D绘图中坐标系统.平移变换(translate).比例变换(scale).旋转变换(ro ...

  10. Qt优雅地结束线程(两种方法都是用Mutex锁住bool变量进行修改,然后由bool变量控制耗时动作的退出,即正常退出)

    如果一个线程运行完成,就会结束.可很多情况并非这么简单,由于某种特殊原因,当线程还未执行完时,我们就想中止它.不恰当的中止往往会引起一些未知错误.比如:当关闭主界面的时候,很有可能次线程正在运行,这时 ...