1. #include <iostream>
  2. #include <stack>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include<queue>
  6. #include<algorithm>
  7. using namespace std;
  8. int a[][]=
  9. {
  10. {,,,,,,,,,},{,,,,,,,,,},
  11. {,,,,,,,,,},{,,,,,,,,,},
  12. {,,,,,,,,,},{,,,,,,,,,},
  13. {,,,,,,,,,},{,,,,,,,,,},
  14. {,,,,,,,,,},{,,,,,,,,,}
  15. };
  16. int dir[][]={{-,},{,},{,},{,-}};
  17. int vis[][];//用来标记有没有走过(有没有在队列中)
  18. int b[][];//用来记录bfs的过程
  19. struct Node
  20. {
  21. int x,y;
  22. };
  23. queue<Node>q;
  24. int main()
  25. {
  26. memset(b,,sizeof(b));
  27. memset(vis,,sizeof(vis));
  28. while(!q.empty()) q.pop();//初始化队列
  29.  
  30. Node start;
  31. start.x=;
  32. start.y=;
  33. vis[][]=;
  34. b[][]=;
  35. q.push(start);//把起点放进队列
  36. bool f=;
  37. while(!q.empty())
  38. {
  39. Node temp;
  40. temp=q.front();//取出队头元素
  41. q.pop();
  42. int x=temp.x;
  43. int y=temp.y;
  44. if(x==&&y==)//若走到了
  45. {
  46. f=;
  47. Node road[];//用来记录路径
  48. //for(int i=1;i<=8;i++)//可以通过输出b数组来观察bfs的实现过程
  49. //{
  50. // for(int j=1;j<=8;j++)
  51. // {
  52. // printf("%5d",b[i][j]);
  53. // }
  54. // cout<<endl;
  55. //}
  56. //cout<<b[8][8]<<endl;
  57. int k=;
  58. while(!(x==&&y==))//通过b数组来找到之前是哪一个点走到x,y的
  59. {
  60. road[k].x=x;
  61. road[k++].y=y;
  62. for(int i=;i<;i++)
  63. {
  64. int xx=x+dir[i][];
  65. int yy=y+dir[i][];
  66. if(xx<||yy<||xx>||yy>) continue;//超出范围的不要
  67. if(b[xx][yy]==b[x][y]-)
  68. {
  69. x=xx;//倒退回去
  70. y=yy;
  71. break;//一定要跳出,要把更新的x,y放到road里
  72. }
  73. }
  74. }
  75. road[k].x=;//别忘了把起点放进去
  76. road[k].y=;
  77. for(int i=k;i>=;i--)//输出路径
  78. {
  79. cout<<road[i].x<<" "<<road[i].y<<endl;
  80. }
  81. }
  82. if(f==) //找到路了就不用再跑大循环了
  83. break;
  84.  
  85. for(int i=;i<;i++)//遍历四个方向
  86. {
  87. int xx=x+dir[i][];
  88. int yy=y+dir[i][];
  89. if(a[xx][yy]==&&vis[xx][yy]==)
  90. {
  91. vis[xx][yy]=;
  92. Node New;
  93. New.x=xx;
  94. New.y=yy;
  95. b[xx][yy]=b[x][y]+;//用来标记走到(xx,yy)是第几步
  96. q.push(New);//放进队列
  97. }
  98. }
  99. }
  100. return ;
  101. }

走迷宫(用队列bfs并输出走的路径)的更多相关文章

  1. Poj3984 迷宫问题 (BFS + 路径还原)

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

  2. 【bfs】1252 走迷宫

    [题目描述] 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直方向走,不 ...

  3. HDU 2102 A计划(BFS/DFS走迷宫)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  4. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  5. 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)

    走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...

  6. C语言之走迷宫深度和广度优先(利用堆栈和队列)

    完成以下迷宫 利用二维数组储存每一个数组里的值,若是不能走则为1,若是可行就是0,走过了就设为2. 一般是再复制一个数组,用来记录. 堆栈的思想就是将一个点的上下左右都遍历一遍,若可行进栈,跳出遍历, ...

  7. 百炼3752:走迷宫--栈实现dfs

    3752:走迷宫 总时间限制:  1000ms 内存限制:  65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...

  8. 洛谷P1238 走迷宫题解

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

  9. 【ybt1252】走迷宫

    (还是蛮经典的一道bfs) 显然算法bfs [传送门] 算法基本上算是bfs的模板了,(模板详见[新知识]队列&bfs[洛谷p1996约瑟夫问题&洛谷p1451求细胞数量]) #inc ...

随机推荐

  1. Environment.NewLine

    https://docs.microsoft.com/en-us/dotnet/api/system.environment.newline?view=netframework-4.7.2 https ...

  2. 通过代码来操作SQLite的示例

    Getting started with SQLite in C# http://blog.tigrangasparian.com/2012/02/09/getting-started-with-sq ...

  3. NOIP2016 T4 魔法阵 暴力枚举+前缀和后缀和优化

    想把最近几年的NOIP T4都先干掉,就大概差16年的,所以来做一做. 然后这题就浪费了我一整天QAQ...果然还是自己太弱了QAQ 点我看题 还是pa洛谷的... 题意:给m个物品,每个物品有一个不 ...

  4. LightOJ 1027 A Dangerous Maze(期望)

    https://cn.vjudge.net/problem/LightOJ-1027 题意:有n扇门,每扇门有个时间ti,选择正数的门可以在ti后带你走出迷宫,负数的门会在ti后带你回到起点,然后重新 ...

  5. POJ 3281 Dining(最大流)

    http://poj.org/problem?id=3281 题意: 有n头牛,F种食物和D种饮料,每头牛都有自己喜欢的食物和饮料,每种食物和饮料只能给一头牛,每头牛需要1食物和1饮料.问最多能满足几 ...

  6. 16s workfollw

    http://bioconductor.org/packages/devel/bioc/vignettes/metagenomeFeatures/inst/doc/Example_16S_Annota ...

  7. python stat获取文件信息

    import os statinfo = os.stat('qqq.txt') print(statinfo,"\n") print(statinfo.st_mode) 输出 os ...

  8. 创建 shiny 应用程序

    R 本身是一个优秀的数据分析和数据可视化平台.然而,我们通常不会将 R 和分析脚本提供给客户,让客户自己运行.数据分析的结果不仅可以在 HTML 网页.PDF 文档或 Word 文档中显示,还可以呈现 ...

  9. ddt中的data,unpack,file_data实现数据驱动--数据分离

    ddt:Class decorator for subclasses of ``unittest.TestCase``. -----``unittest.testcase``子类的类修饰器. 首先介绍 ...

  10. Java中如何读写cookie (二)

    Java中删除cookie Cookie[]   cookies=request.getCookies();       //cookies不为空,则清除       if(cookies!=null ...