题目链接:

  hdu 5335 Walk Out

题目描述:
  有一个n*m由0 or 1组成的矩形,探险家要从(1,1)走到(n, m),可以向上下左右四个方向走,但是探险家就是不走寻常路,他想让他所走的路线上的0/1组成的二进数最小,现在要为矫情无比的探险家找最优路径咯。

解题思路:
  对于二进制数,前导零是对数字大小没有任何影响的。当到不得不走1的时候就只能向下,或者向右走了。所以先搜索出来一直走零,能走到的最靠近终点的位置,然后在类似搜索,找出最优路径。

  1. #include <queue>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7. const int maxn = ;
  8. struct node
  9. {
  10. int x, y;
  11. };
  12. char maps[maxn][maxn];
  13. bool vis[maxn][maxn];
  14. int dir[][] = {,, ,, -,, ,-};
  15. int x, y, n, m;
  16. bool Ok (int x, int y)
  17. {
  18. if (x< || y< || x>=n || y>=m)
  19. return false;
  20. return true;
  21. }
  22. void bfs ()
  23. {
  24. node p, q;
  25. p.x = x, p.y = y;
  26. queue <node> Q;
  27. Q.push (p);
  28. while (!Q.empty())
  29. {
  30. p = Q.front();
  31. Q.pop();
  32. for (int i=; i<; i++)
  33. {
  34. q.x = p.x + dir[i][];
  35. q.y = p.y + dir[i][];
  36. if (Ok(q.x, q.y) && !vis[q.x][q.y])
  37. {
  38. vis[q.x][q.y] = true;
  39. if (maps[q.x][q.y] == '')
  40. Q.push (q);
  41. if (x + y < q.x + q.y)
  42. x = q.x, y = q.y;
  43. }
  44. }
  45. }
  46. }
  47. int main ()
  48. {
  49. int t;
  50. scanf ("%d", &t);
  51. while (t --)
  52. {
  53. memset (vis, false, sizeof(vis));
  54. vis[][] = true;
  55. scanf ("%d %d", &n, &m);
  56. for (int i=; i<n; i++)
  57. scanf ("%s", maps[i]);
  58. x = y = ;
  59. if (maps[x][y] == '')
  60. bfs ();
  61. if (maps[x][y] == '')
  62. putchar('');
  63. else
  64. {
  65. bool nowflag = false;
  66. putchar ('');
  67. for (int i=x+y; i<n+m-; i++)
  68. {
  69. bool flag = false;
  70. for (x=; x<=i; x++)
  71. {
  72. y = i - x;
  73. if (!Ok(x, y) || !vis[x][y])
  74. continue;
  75. if (nowflag && maps[x][y]=='')
  76. continue;
  77. for (int j=; j<; j++)
  78. {
  79. int a = x + dir[j][];
  80. int b = y + dir[j][];
  81. if (!Ok(a, b))
  82. continue;
  83. vis[a][b] = true;
  84. if (maps[a][b] == '')
  85. flag = true;
  86. }
  87. }
  88. nowflag = flag;
  89. putchar (flag?'':'');
  90. }
  91. }
  92. puts("");
  93. }
  94. return ;
  95. }

hdu 5335 Walk Out (搜索)的更多相关文章

  1. hdu 5335 Walk Out 搜索+贪心

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total S ...

  2. HDU 5335 Walk Out BFS 比较坑

    H - H Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  3. 2015 Multi-University Training Contest 4 hdu 5335 Walk Out

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  4. hdu 5335 Walk Out(bfs+斜行递推) 2015 Multi-University Training Contest 4

    题意—— 一个n*m的地图,从左上角走到右下角. 这个地图是一个01串,要求我们行走的路径形成的01串最小. 注意,串中最左端的0全部可以忽略,除非是一个0串,此时输出0. 例: 3 3 001 11 ...

  5. HDU 5335——Walk Out——————【贪心】

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  6. HDU 5335 Walk Out(多校)

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  7. hdu 5335 Walk Out (2015 Multi-University Training Contest 4)

    Walk Out                                                                         Time Limit: 2000/10 ...

  8. HDU 5335 Walk Out (BFS,技巧)

    题意:有一个n*m的矩阵,每个格子中有一个数字,或为0,或为1.有个人要从(1,1)到达(n,m),要求所走过的格子中的数字按先后顺序串起来后,用二进制的判断大小方法,让这个数字最小.前缀0不需要输出 ...

  9. HDU 5335 Walk Out

    题意:在一个只有0和1的矩阵里,从左上角走到右下角, 每次可以向四个方向走,每个路径都是一个二进制数,求所有路径中最小的二进制数. 解法:先bfs求从起点能走到离终点最近的0,那么从这个点起只向下或向 ...

随机推荐

  1. Semaphore使用

    Semaphore使用

  2. VS2015 android 设计器不能可视化问题解决。

    近期安装了VS2015,体验了一下android 的开发,按模板创建执行了个,试下效果非常不错.也能够可视化设计.但昨天再次打开或创建一个android程序后,设计界面直接不能显示,显示错误:(可能是 ...

  3. Qt移动应用开发(四):应用粒子特效

    Qt移动应用开发(四):应用粒子特效 上一篇文章介绍了Qt Quick是如何对帧动画进行支持的.帧动画的实现离不开状态机.而状态机.动画和状态切换(transitions)则是Qt框架的核心内容.也就 ...

  4. 查看和改动MySQL数据库表存储引擎

            要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎: ...

  5. JavaScript学习14:表单处理

    什么是表单? 在HTML中,表单是由<form>元素来表示的.而在JavaScript中,表单相应的则是HTMLFormElement类型.HTMLFormElement继承了HTMLEl ...

  6. iOS开发——高级篇——Runloop相关一

    一.什么是runLoop 1.说白了,runloop就是运行循环 2.runloop,他是多线程的法宝 通常来讲,一个线程一次只能执行一个任务,执行完之后就退出线程.但是,对于主线程是不能退出的,因此 ...

  7. asp.net listview 实现分页浏览效果

    页面代码: <div style="margin-top:0px;">共<asp:Label ID="lb_count" runat=&quo ...

  8. HBase 数据迁移

    最近两年负责 HBase,经常被问到一些问题, 本着吸引一些粉丝.普及一点HBase 知识.服务一点阅读人群的目的,就先从 HBase 日常使用写起,后续逐渐深入数据设计.集群规划.性能调优.内核源码 ...

  9. Java数据类型的分类

    java支持的类型分为两类:基本类型和引用类型 一.基本类型 4类8种: (1)整型:int.short.long.byte. (2)浮点型:float.double. (3)字符型:char. (4 ...

  10. python和python3

    1 安装python和python3的方法 如果是python,那么直接python setup.py install; 如果是python3,那么直接python3 setup.py install ...