找到朋友的最短时间

Sample Input
7 8
#.#####. //#不能走 a起点 x守卫 r朋友
#.a#..r. //r可能不止一个
#..#x...
..#..#.#
#...##..
.#......
........

Sample Output
13

bfs+优先队列

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <queue>
 5 using namespace std;
 6
 7 int n, m;
 8 char map[205][205];
 9 int sx, sy;
10 bool flag;
11
12 struct node
13 {
14     int x , y , step ;
15     bool operator <(const node &t) const
16     {
17         return step > t.step ;
18     }
19 };
20
21 int dx[] = {0,0,1,-1} ;
22 int dy[] = {1,-1,0,0} ;
23
24 void bfs()
25 {
26     node now , t ;
27     int i , fx ,fy ;
28     priority_queue<node> q ;
29     now.x = sx ;
30     now.y = sy ;
31     now.step = 0 ;
32     q.push(now) ;
33     map[sx][sy] = '#' ;
34     while(!q.empty())
35     {
36         now = q.top() ;
37         q.pop() ;
38         for (i = 0 ; i < 4 ; i++)
39         {
40             fx = now.x + dx[i] ;
41             fy = now.y + dy[i] ;
42             if (fx<0 || fy<0 || fx >=n || fy >=m ||map[fx][fy] == '#')
43                 continue ;
44             if (map[fx][fy] == 'r')
45             {
46                 printf("%d\n" , now.step+1) ;
47                 flag = 1 ;
48                 return ;
49             }
50             if (map[fx][fy] == 'x')
51             {
52                 t.x = fx ;
53                 t.y = fy ;
54                 t.step = now.step + 2 ;
55                 q.push(t) ;
56             }
57             else
58             {
59                 t.x = fx ;
60                 t.y = fy ;
61                 t.step = now.step + 1 ;
62                 q.push(t) ;
63             }
64             map[fx][fy] = '#' ;
65
66         }
67     }
68
69
70 }
71
72 int main()
73 {
74   //  freopen("in.txt","r",stdin) ;
75     while (scanf("%d %d" , &n , &m) !=EOF)
76     {
77         int i , j ;
78         for (i = 0 ; i < n ; i++)
79         {
80             for (j = 0 ; j < m ; j++)
81             {
82                 cin>>map[i][j] ;
83                 if (map[i][j] == 'a')
84                 {
85                     sx = i ;
86                     sy = j ;
87                 }
88             }
89         }
90         flag = 0 ;
91         bfs() ;
92         if (!flag)
93             printf("Poor ANGEL has to stay in the prison all his life.\n") ;
94     }
95
96     return 0 ;
97 }

View Code

dfs

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 using namespace std;
 7
 8 char map[220][220] ;
 9 bool visit[220][220] ;
10
11 int n , m ;
12 int MIN ;
13
14
15
16 void dfs(int x , int y , int sum)
17 {
18     if (x<0 || y<0 || x>= n || y>= m)
19         return ;
20     if (map[x][y] == '#')
21         return ;
22     if (sum >= MIN)
23         return ;
24     if (visit[x][y] == 1)
25         return ;
26     if (map[x][y] == 'r')
27     {
28         if (sum < MIN)
29             MIN = sum ;
30         return ;
31     }
32     if (map[x][y] == 'x')
33         sum++ ;
34     visit[x][y] = 1 ;
35     dfs(x+1,y,sum+1) ;
36     dfs(x-1,y,sum+1) ;
37     dfs(x,y+1,sum+1) ;
38     dfs(x,y-1,sum+1) ;
39     visit[x][y] = 0 ;
40 }
41
42 int main()
43 {
44    // freopen("in.txt","r",stdin) ;
45
46
47    while (scanf("%d %d" , &n , &m) !=EOF)
48    {
49        if (n == 0 && m == 0)
50           break ;
51        memset(visit ,0 ,sizeof(visit)) ;
52        int i , j ;
53        int bx , by ;
54        int sum = 0 ;
55
56        for (i = 0 ; i < n ; i++)
57        {
58            for (j = 0 ; j < m ; j++)
59           {
60               cin>>map[i][j];
61               if (map[i][j] == 'a')
62               {
63                   bx = i ;
64                   by = j ;
65
66               }
67           }
68
69        }
70
71
72
73
74        MIN = INT_MAX ;
75        dfs(bx,by,sum) ;
76        if (MIN != INT_MAX)
77          printf("%d\n" , MIN) ;
78        else
79          printf("Poor ANGEL has to stay in the prison all his life.\n") ;
80
81    }
82
83     return 0;
84 }

View Code

转载于:https://www.cnblogs.com/mengchunchen/p/4515077.html

hdu 1242 找到朋友最短的时间 (BFS+优先队列)相关推荐

  1. 如何用最短的时间找到初级数据分析工作?

    ​ 零基础,想学习数据分析的朋友,往往有如下困惑: 网上资料一大堆,完全零基础,从哪开始入手 懒癌晚期,无法坚持完成学习 生活压力太大,想尽快找到数据分析师工作 经常遇到问题,浪费大量宝贵时间 没有项 ...

  2. (step4.2.3)hdu 1242(Rescue——BFS)

    题目大意:friends用最短的时间去救angel '.'表示通道 '#'表示墙壁 'x'表示guard.走一格要一单位时间,杀死一个guard要一个单位时间. 如果可以救求最短时间,否则按要求输出 ...

  3. FBI阅人术——用最短的时间了解一个人

    FBI阅人术--用最短的时间了解一个人 和陌生人第一次见面时,要如何在一开始谈话的几分钟内,了解这个人?如何和对方拉近距离?如何找到对方喜爱的话题?如何让对方愿意开口? 这都得依靠细心而入微的观察力, ...

  4. 肢体语言心理学+FBI阅人术(行为心理学) 用最短的时间了解一个人

    肢体语言心理学      如何从站姿判断人 每个人都有自己习惯的站立姿势.美国夏威夷大学心理学家指出,不同的站姿可以显示出一个人的性格特征. 站立时习惯把双手插入裤袋的人:城府较深,不轻易向人表露内心 ...

  5. 如何用最短的时间学会数据分析?

    零基础,想学习数据分析的朋友,往往有如下困惑: 网上资料一大堆,完全零基础,从哪开始入手 懒癌晚期,无法坚持完成学习 生活压力太大,想尽快找到数据分析师工作 经常遇到问题,浪费大量宝贵时间 没有项目经 ...

  6. 如何用最短的时间学会C语言,并掌握C语言的精髓所在?

    点击上方蓝字关注我,了解更多咨询 及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是"让我欢喜让我忧."欢喜的是,C语言功能非常强大.应用广泛,一旦掌握了后,你就可以理直气壮地 ...

  7. 从起始点到目标点的最短步数(BFS)

    从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在古老的魔兽传说中,有两个军团,一 ...

  8. SDUT OJ 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)

    数据结构实验之图论五:从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss P ...

  9. 【Hadoop配置】用最短的时间配置伪分布式Hbase(亲身经历)

    [Hadoop配置]用最短的时间配置伪分布式Hbase(亲身经历) 目录 [Hadoop配置]用最短的时间配置伪分布式Hbase(亲身经历) 一.鸣谢 二.前言 三.从头配置Hbase (一)下载hb ...

  10. 【计算机网络实验】教程一:用最短的时间组建小型局域网(亲身经历)

    [计算机网络实验]教程一:用最短的时间组建小型局域网(亲身经历) 目录 [计算机网络实验]教程一:用最短的时间组建小型局域网(亲身经历) 一.前言 二.准备工作 (一)认识窗口及相关组件 (二)特别需 ...

最新文章

  1. TensorFlow csv读取文件数据(代码实现)
  2. 中文自然语言处理数据集:ChineseNLPCorpus(附链接)
  3. [Java] HashMap 源码简要分析
  4. SQL基础--完整性约束
  5. .NET设计模式系列文章
  6. Unity5x编辑器的视图二
  7. 从一张表里选择一列加入到另一张表_【附中奖名单】| Excel妙招,数据透视表也能轻松做好排序!...
  8. 任务调度框架Quartz基本介绍
  9. 安装electron报错
  10. I Got a Matrix!
  11. python模块(6)-Pandas 简易使用教程
  12. java中大量匿名内部类的坏处_java中的匿名内部类总结
  13. laravel实现第三方qq一键登录
  14. 初学者python笔记(map()函数、reduce()函数、filter()函数、匿名函数)
  15. 小米手机拦截返回音设置不了_小米手机用户注意了!这几个超好用的功能你没用过就太可惜了...
  16. python数据结构6 -二叉树
  17. [原创]markdown语法学习(commonmark)
  18. php日文文件名 liunx,linux文件名乱码
  19. WPS无法使用复制粘贴快捷键
  20. php php拼接字符串函数_PHP_PHP开发中常用的字符串操作函数,1,拼接字符串 拼接字符串是最 - phpStudy...

热门文章

  1. MySql执行Sql语句时出现“MySqlException: Parameter ‘@maxNo‘ must be defined.”的错误
  2. C++ 实现反射机制(转载)
  3. 每天一道剑指offer-二叉树中和为某一值的路径
  4. java接口中有效的方法声明_在Java接口中,下列选顶中有效的方法声明是
  5. reids学习笔记汇总
  6. vue-admin-template修改登录功能
  7. 四川大专计算机专业排行,四川排名前三中等职业技术学院专业排行
  8. 疯狂python讲义这本书怎么样_疯狂Python讲义(读书笔记)
  9. 软件界面是怎么做出来的_可可英语这个软件怎么样?了解的人出来说说真实情况...
  10. css两张图片怎么合在一起_PhotoShop怎么把两张图片合成一张?怎么用ps把两张图片合成一张?...