Description

定义一个二维数组:

  1. int maze[5][5] = {

  2. 0, 1, 0, 0, 0,

  3. 0, 1, 0, 1, 0,

  4. 0, 0, 0, 0, 0,

  5. 0, 1, 1, 1, 0,

  6. 0, 0, 0, 1, 0,

  7. };

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

  1. 0 1 0 0 0
  2. 0 1 0 1 0
  3. 0 0 0 0 0
  4. 0 1 1 1 0
  5. 0 0 0 1 0

Sample Output

  1. (0, 0)
  2. (1, 0)
  3. (2, 0)
  4. (2, 1)
  5. (2, 2)
  6. (2, 3)
  7. (2, 4)
  8. (3, 4)
    44
  9.  
  10. 问题分析:依然是本应该用dfs的问题但我用的是bfs。。。通过在地图上记录上一个节点并从终点开始走,可以得到路径。
  1. #include "cstdio"
  2. #include "iostream"
  3. #include "queue"
  4.  
  5. using namespace std;
  6. int a[][];
  7. struct person
  8. {
  9. int i;
  10. int j;
  11. };
  12. void abegin()
  13. {
  14. for (int i=;i<;i++)
  15. for (int j=;j<;j++)
  16. cin>>a[i][j];
  17. }
  18. void print()
  19. {
  20. int i=,j=;
  21. printf ("(%d, %d)\n",i,j);
  22. while (i != || j != )
  23. {
  24. switch(a[i][j])
  25. {
  26. case : i--; break;
  27. case : i++; break;
  28. case : j--; break;
  29. case : j++; break;
  30. default: continue;
  31. }
  32. printf ("(%d, %d)\n",i,j);
  33. }
  34. }
  35. void bfs ()
  36. {
  37. queue<person> p;
  38. person fir,sec;
  39. fir.i = ;
  40. fir.j = ;
  41. a[fir.i][fir.j] = ;
  42. p.push(fir);
  43. while (!p.empty())
  44. {
  45. sec = p.front();
  46. p.pop();
  47. if (sec.i> && a[sec.i-][sec.j] < )
  48. {
  49. fir.i=sec.i-;
  50. fir.j=sec.j;
  51. a[fir.i][fir.j] = ;
  52. p.push(fir);
  53. }
  54. if (sec.i< && a[sec.i+][sec.j] < )
  55. {
  56. fir.i=sec.i+;
  57. fir.j=sec.j;
  58. a[fir.i][fir.j] = ;
  59. p.push(fir);
  60. }
  61. if (sec.j> && a[sec.i][sec.j-] < )
  62. {
  63. fir.i=sec.i;
  64. fir.j=sec.j-;
  65. a[fir.i][fir.j] = ;
  66. p.push(fir);
  67. }
  68. if (sec.j< && a[sec.i][sec.j+] < )
  69. {
  70. fir.i=sec.i;
  71. fir.j=sec.j+;
  72. a[fir.i][fir.j] = ;
  73. p.push(fir);
  74. }
  75.  
  76. if (a[][] != )
  77. {
  78. print ();
  79. return;
  80. }
  81. }
  82. }
  83. int main()
  84. {
  85. abegin();
  86. bfs();
  87. return ;
  88. }
  1.  

暑假集训(1)第八弹 -----简单迷宫(Poj3984)的更多相关文章

  1. 暑假集训(4)第八弹——— 组合(hdu1524)

    题意概括:你已经赢得两局,最后一局是N个棋子往后移动,最后一个无法移动的玩家失败. 题目分析:有向无环图sg值游戏,尼姆游戏的抽象表达.得到每个棋子的sg值之后,把他们异或起来,考察异或值是否为0. ...

  2. 暑假集训(2)第八弹 ----- Hero(hdu4310)

    K - Hero Crawling in process... Crawling failed Time Limit:3000MS     Memory Limit:65536KB     64bit ...

  3. 暑假集训(1)第六弹 -----简单计算器(Hdoj1237)

    Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值.   Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算 ...

  4. 暑假集训(3)第四弹 -----Frogger(Poj2253)

    题意梗概:青蛙王子最近喜欢上了另一只经常坐在荷叶上的青蛙公主.不过这件事不小心走漏了风声,被某fff团团员知 道了,在青蛙王子准备倾述心意的那一天,fff团团员向湖泊中注入大量的充满诅咒力量的溶液.这 ...

  5. 暑假集训(2)第七弹 -----今年暑假不AC(hdu2037)

    J - 今年暑假不AC Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64 ...

  6. 暑假集训(1)第三弹 -----Dungeon Master(Poj2251)

    Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...

  7. 暑假集训(4)第五弹——— 数论(hdu1222)

    题意概括:那天以后,你好说歹说,都快炼成三寸不烂之舍之际,小A总算不在摆着死人脸,鼓着死鱼眼.有了点恢复的征兆.可孟子这家伙说的话还是有点道理,那什么天将降....额,总之,由于贤者法阵未完成,而小A ...

  8. 暑假集训(4)第七弹——— 组合(hdu1850)

    题意概括:你赢得了第一局.魔鬼给出的第二局是,如果有N堆牌,先手的人有几种可能胜利. 问题分析:尼姆游戏,先得到n堆牌的数量异或和,再将异或和与每一个牌组的数量异或,如果结果小于原牌组数量 则可能++ ...

  9. 暑假集训(4)第六弹——— 组合(poj1067)

    题意概括:上一次,你成功甩掉了fff机械兵.不过,你们也浪费了相当多的时间.fff团已经将你们团团包围,并且逐步 逼近你们的所在地.面对如此危机,你不由得悲观地想:难道这acm之路就要从此中断?虽然走 ...

随机推荐

  1. zookeeper系列(一)安装

    zookeeper是一个分布式应用协调服务,主要用来解决分布式应用配置项的管理.同步服务.集群管理等,它由Java语言编写,但它支持Java和C两种编程语言接口:   环境部署 操作系统:centos ...

  2. 如果iis的配置文件 applicationHost.config坏掉了, 会在 C:\inetpub\history\ 中存储历史备份。复制过去还原就可以了-摘自网络

    You will usually get the error ‘Configuration file is not well-formed XML’ ‘C:\Windows\system32\inet ...

  3. 如何在eclipse中安装Jess

    如何在eclipse中安装Jess 浏览:49 | 更新:2014-05-12 16:39 这个文章帮了不少忙,感谢! 但经我实践,还要把插件那些文件向/dropins/sdk下也放一份,才能成功. ...

  4. C#- 基于Lumisoft.NET组件的POP3邮件接管和删除操纵

    Lumisoft.NET组件是一个很是强大的邮件发送.邮件接管等功能的开源组件,一般用它来处理惩罚邮件的相干操纵,是很是合适的.之前也写过一些该组件的漫笔文章,不过主如果哄骗来发送邮件居多,比来因为项 ...

  5. Ubuntu下开启root登陆

    亲手安装过Ubuntu的童鞋都知道,默认安装只会添加一个普通用户名和密码,而超级用户权限则是利用sudo命令来执行.在Ubuntu下使用root登陆或者在shell中用su命令切换到root时会提示错 ...

  6. systemtap 技巧系列 +GDB

    http://blog.csdn.net/wangzuxi/article/category/2647871

  7. document.all的用法详解

    all[] 已经被 Document 接口的标准的 getElementByid() 方法和 getElementsByTagName() 方法以及 Document 对象的 getElementsB ...

  8. hibernate篇章二--成就搭建hibernate框架

    在网上的资料很多,但是成功搭建一个Hibernate框架的很少,下面我将用一个简单的例子成功搭建一个Hibernate框架给大伙瞧瞧 该链接中有源代码和数据库,例子很简单,只是往数据库中的person ...

  9. 关于ContentProvider的批量操作

    今天看公司代码,发现在批量插入通话记录和联系人的时候,用了一个 ArrayList<ContentProviderOperation> ops = new ArrayList<Con ...

  10. ACM——数的计数

    http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1050 数的计数 时间限制(普通/Jav ...