HDU 1312

  题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象为墙,然后.为可以走的空地,求人可以走的最大点数。

  解题思路:从起点开始,起点的四个方向满足条件的点分别入队(放置重复入队,需只要一入队就标记已访问而不是取出时再进行标记),直至队为空。

  1. /*HDU 1312 ----- Red and Black 入门搜索 BFS解法*/
  2. #include <cstdio>
  3. #include <queue>
  4. using namespace std;
  5.  
  6. int n, m; //n行m列
  7. int cnt;
  8. char mapp[][];
  9. int dirx[] = { -, , , };
  10. int diry[] = { , , -, }; //用于循环来访问4个方向
  11. struct Node{
  12. int x, y;
  13. };
  14. queue<Node> q;
  15.  
  16. void bfs(){
  17. /*队不为空时 表明还可以近一步搜索*/
  18. /*在队中的点都是已访问过、但需近一步访问周围四个方向的点的点*/
  19. while (!q.empty()){
  20. Node tmp = q.front();
  21. q.pop();
  22. Node tmp2;
  23. /*近一步判断该点的四个方向四否可以访问*/
  24. for (int i = ; i < ; ++i){
  25. //tmp2即为4个方向的点
  26. tmp2.x = tmp.x + dirx[i];
  27. tmp2.y = tmp.y + diry[i];
  28. if (tmp2.x >= && tmp2.x < n && tmp2.y >= && tmp2.y < m
  29. && mapp[tmp2.x][tmp2.y] != '#'){
  30. //该点可访问
  31. ++cnt;
  32. mapp[tmp2.x][tmp2.y] = '#'; //访问过后标记为不可访问
  33. q.push(tmp2); //入队以下次循环近一步搜索
  34. }
  35. }//for(i)
  36. }//while(empty)
  37. }
  38.  
  39. int main()
  40. {
  41. int startx, starty;
  42. //m行m列 注意题目先给出列数
  43. while (scanf("%d%d", &m, &n) == && (m + n)){
  44. for (int i = ; i < n; ++i){
  45. scanf("%s", mapp[i]);
  46. for (int j = ; j < m; ++j){
  47. if ('@' == mapp[i][j]){
  48. startx = i;
  49. starty = j;
  50. cnt = ; //初始化找到一块
  51. mapp[i][j] = '#'; //访问过后为已访问过
  52. }
  53. }
  54. }//for(i)
  55. Node start;
  56. start.x = startx; start.y = starty;
  57. q.push(start);
  58. bfs();
  59. printf("%d\n", cnt);
  60. }
  61.  
  62. return ;
  63. }

HDU 1312 Red and Black --- 入门搜索 BFS解法的更多相关文章

  1. HDU 1312 Red and Black --- 入门搜索 DFS解法

    HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...

  2. HDU 1312:Red and Black(DFS搜索)

      HDU 1312:Red and Black Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & ...

  3. HDU 1312 Red and Black(最简单也是最经典的搜索)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...

  4. HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)

    题目代号:HDU 1312 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/100 ...

  5. HDU 1312 Red and Black (dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...

  6. hdu 1312:Red and Black(DFS搜索,入门题)

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  7. HDU 1312 Red and Black DFS(深度优先搜索) 和 BFS(广度优先搜索)

    Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  8. HDU 1312 Red and Black (DFS & BFS)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:有一间矩形房屋,地上铺了红.黑两种颜色的方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相 ...

  9. HDU 1312 Red and Black(bfs)

    Red and Black Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descr ...

随机推荐

  1. C# 轉義字符

    转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将 ...

  2. CSU1022

    题目: blue和AutoGerk是好朋友.他们的相同点是都喜欢研究算法,不同点是AutoGerk已是大牛而blue还是菜鸟.blue经常拿一些自以为很难的问题去问AutoGerk,想难倒他,但是每次 ...

  3. [C/C++]数据类型与变量

    1.类型: 1.1.简介 1.1.1.基本类型(base type)和复合类型(compound type): 复合类型是指基于其它类型定义的类型.([1].2.3 p45)那么基本类型就是复合类型基 ...

  4. ZooKeeper启动过程2:FastLeaderElection

    前一篇文章中说到,启动ZooKeeper集群时,需要分别启动集群中的各个节点,各节点以QuorumPeer的形式启动,最后到达startLeaderElection和lookForLeader. 先说 ...

  5. HTML--10Jquery

    在<网页制作Dreamweaver(悬浮动态分层导航)>中,运用到了jQuery的技术,轻松实现了菜单的下拉.显示.隐藏的效果,不必再用样式表一点点地修改,省去了很多麻烦,那么jQuery ...

  6. C++ offsetof

    这是一个宏,用于计算类中某个成员的地址相对于类实例的偏移量 在C++11中,要求这个类standard_layout 基本用法是这样子的: #include <stdio.h> /* pr ...

  7. Wythoff's game

    这个问题就是OJ题里出现的取石子游戏,http://en.wikipedia.org/wiki/Wythoff%27s_game. 维基里面的通项公式并不适用于算法求解.需要理解下面两条规律: 1.A ...

  8. JAVA判断当前时间是上午am还是下午pm

    //结果为"0"是上午 结果为"1"是下午 public class GregorianTest { public static void main(Strin ...

  9. HDU1556-color the ball(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 #include<cstdio> using namespace std; stru ...

  10. HDU 5100

    http://acm.hdu.edu.cn/showproblem.php?pid=5100 用1*k方格覆盖n*n方格 有趣的一道题,查了下发现m67的博客还说过这个问题 其实就是两种摆法取个最大值 ...