题目:

1242 Rescue
  1 //这是一个比较标准的bfs,没有经过任何优化,但是思路比较清晰,容易看懂。
  2 #include <iostream>
  3 #include <cstdio>
  4 #include <queue>
  5 using namespace std;
  6 //node结构体
  7 typedef struct
  8 {
  9     int x;
 10     int y;
 11     int len;
 12 }node;
 13 //全局变量定义
 14 #define M 202
 15 char Map[M][M];//地图
 16 int mask[M][M];//访问标志
 17 queue<node> q;//队列,只在bfs中用到
 18 int bx,by,ex,ey,w,h;//起点、终点、宽、高
 19 int step[4][2] = {//四个方向
 20     //0-up
 21     0,-1,
 22     //1-right
 23     1,0,
 24     //2-down
 25     0,1,
 26     //3-left
 27     -1,0
 28 };
 29
 30 void readMap(int m,int n);//读取地图
 31 void bfs();//bfs
 32 int tryXY(int x,int y);//尝试x、y点
 33
 34 void main()
 35 {
 36     while (scanf("%d %d",&h,&w)==2)
 37     {
 38         readMap(h,w);
 39         bfs();
 40         cout<<mask[ex][ey]<<endl;
 41     }
 42 }
 43
 44 void readMap(int m,int n)//m-h,n-w
 45 {
 46     int i,j;
 47     for (i=0;i<m;i++)
 48     {
 49         for (j=0;j<n;j++)
 50         {
 51             cin>>Map[i][j];
 52             mask[i][j] = -1;//标志为未访问
 53             if (Map[i][j] == 'r')
 54             {//friend为起点,且化为road
 55                 Map[i][j] = '.';
 56                 bx = i;    by = j;
 57             }
 58             if (Map[i][j] == 'a')
 59             {//angel为终点,且化为road
 60                 Map[i][j] = '.';
 61                 ex = i;    ey = j;
 62             }
 63         }
 64     }
 65 }
 66
 67 void bfs()
 68 {
 69     node n,m;//m为队头,n为m衍生的测试点
 70     int i,ret;
 71     //起点
 72     m.x = bx;
 73     m.y = by;
 74     m.len = 0;//len
 75     mask[bx][by] = 0;//ask
 76     q.push(m);//push
 77     //处理
 78     while (q.size())
 79     {
 80         //get front
 81         m = q.front();
 82         q.pop();
 83         //test node m
 84         for (i=0 ; i<4 ; i++)
 85         {
 86             n.x = m.x+step[i][0]; n.y = m.y+step[i][1];    n.len = m.len+1;
 87             ret = tryXY(n.x,n.y);
 88             switch(ret)
 89             {
 90             case -1://
 91                 break;
 92             case 0:
 93             case 1:
 94                 n.len += ret;
 95                 //如果为访问,保存花销;如果已经访问,保存花销最少。
 96                 if (mask[n.x][n.y] == -1 || n.len<mask[n.x][n.y])
 97                 {
 98                     mask[n.x][n.y] = n.len;//已经访问且保存的是最小花销
 99                     q.push(n);
100                 }
101                 break;
102             }
103         }
104
105     }
106 }
107 int tryXY(int x,int y)
108 {
109     int ret;
110     //越界或遇到墙
111     if (!(x>=0 && x<w && y>=0 && y<h) || (Map[x][y] == '#'))
112         ret = -1;
113     //road or angel
114     if (Map[x][y] == '.')
115         ret = 0;
116     //guard
117     if (Map[x][y] == 'x')
118         ret = 1;
119     return ret;
120 }

本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/10/09/2716111.html,如需转载请自行联系原作者

拯救天使 (BFS)相关推荐

  1. BFS 搜索 Problem 1012 Rescue 拯救天使

    Problem ID:1012 Rescue 简单题意:给出一个地图,其中有一个"a",代表angle,若干个"r",代表去营救angle的朋友,"x ...

  2. hdoj1242(dfs 剪枝 解法)

    题意:拯救行动,天使r有多个朋友a(friends,在这里被坑了几次,没看清题意),天使被关在牢房里,等着朋友来拯救,求拯救天使的最短距离. 解法:如果不剪枝,200*200的地图会超时,可以以天使为 ...

  3. ********广度优先搜索*********

    目录 BFS算法: 广度优先搜索算法 POJ 3278 Catch That Cow 百练 4116:拯救行动 BFS算法: 思路: 1.从初始状态S开始,利用规则,生成下一层的状态. 2.顺序检查下 ...

  4. 搜索算法(一)--DFS/BFS求解拯救同伴问题(JAVA)

    拯救同伴问题 问题描述:假设有如下迷宫,求解从某一点出发到目标位置的最短距离 Input: 5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 4 3 Ou ...

  5. 【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)

    本次笔记内容: 6.3 应用实例:拯救007 6.4 六度空间 文章目录 拯救007 题目与分析 题目 分析 总体算法 六度空间(Six Degrees of Separation) 题目 算法思路 ...

  6. 拯救行动(变种bfs)

    总时间限制: 10000ms 内存限制: 65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用N*M (N, M <= 200)的矩阵来表示.矩阵中的每项可以代表道路(@).墙壁 ...

  7. 2843 拯救炜哥 (bfs)

    题目描述 Description 有一天,炜哥和欧能干一起去大魔王家里做(dao)客(luan),不巧被魔王发现了.魔王将炜哥和欧能干抓走了,关在了两个不同的房间里.魔王听说吃炜哥的肉可以长生不老(炜 ...

  8. [SDOI2012]拯救小云公主【bfs+二分答案】

    题目链接 正难则反. 要直接求从起点到终点的最大距离,不妨反过来求最小的可以阻止骑士从起点到终点的对于全体圆的最小半径. 那么,就是阻止从左上角到右下角的所有相交圆,于是,就是要变成没有从左上角到右下 ...

  9. [luogu] P2498 [SDOI2012]拯救小云公主 二分答案+bfs

    前言 以为二分的是人到BOOS的距离 没想到可以直接二分BOOS的攻击距离 传送门 : 思路 BFS待研究 CODE typedef pair<int,int> pii; map<i ...

最新文章

  1. DNA复制体结构和工作原理首次被揭示
  2. python编程图片_python下载百度图片,python图片下载程序
  3. java五子棋代码详解_java打卡9.5 用方法封装循环点菜代码 详解
  4. OpenGL 光照方程的计算
  5. 小波阈值去噪原理及实现
  6. TensorFlow入门--队列与TensorBoard操作
  7. Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference (纯整数计算)
  8. Win12爆料,微软Windows 12计划3月份开始开发
  9. RDS - 远程桌面服务
  10. git在回退版本时HEAD~和HEAD^的作用和区别
  11. 小米系统shell_分享自用小米手机ADB命令删除系统内置应用
  12. 全国城镇地理数据拼音、文字对照 JSON
  13. armbian清理_N1盒子armbian/ubuntu/linux系统修改日志输出到内存
  14. 杭州到温州老家自驾路线优化与整理
  15. Xshell和Xftp官方家庭免费版
  16. 中国科学院大学计算机考研信息汇总
  17. linux复制与粘贴操作的快捷键
  18. 浅谈对dao层的理解
  19. 启动BIOS的虚拟化设置 | 开启CPU虚拟化支持
  20. 《互联网进化论》-破解互联网的奥秘

热门文章

  1. 并查集及其简单应用:优化kruskal算法
  2. cocos2d-x学习(一) HelloWorld
  3. merge卷积和bn层的原理
  4. Android组件化demo实现以及遇坑分享
  5. 《Redis官方教程》-Redis安全
  6. border-radius 移动之伤
  7. ADO.NET 之 一
  8. HLG 数字去重和排序II【二叉排序树】
  9. [文章摘录] Strategies for Early-Stage Collaborative Design (IEEE Software, 2012)
  10. 使用 ADSync 集成 IBM Lotus Domino Directory 和 Microsoft Active Directory