hdu 2612 Find a way (广搜)

Problem Description
Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki.
Yifenfei’s home is at the countryside, but Merceki’s home is in the center of city. So yifenfei made arrangements with Merceki to meet at a KFC. There are many KFC in Ningbo, they want to choose one that let the total time to it be most smallest. 
Now give you a Ningbo map, Both yifenfei and Merceki can move up, down ,left, right to the adjacent road by cost 11 minutes.

 

Input
The input contains multiple test cases.
Each test case include, first two integers n, m. (2<=n,m<=200). 
Next n lines, each line included m character.
‘Y’ express yifenfei initial position.
‘M’    express Merceki initial position.
‘#’ forbid road;
‘.’ Road.
‘@’ KCF
Output
For each test case output the minimum total time that both yifenfei and Merceki to arrival one of KFC.You may sure there is always have a KFC that can let them meet.
Sample Input
4 4 
Y.#@
.... 
.#..
@..M 
4 4
Y.#@
....
.#.. 
@#.M 
5 5 
Y..@
. .#.
.. .#
... @
..M. 
#...#

 

Sample Output
66
88
66

哈哈,这是第一次自己做广搜的题目,wrong answer - 超时  这就是大半天。 

犯得主要错误:

1、没有对连个队列访问的点进行标记,导致重复访问。

2、总觉得广搜首先搜出来的相遇地点就是最短的。

     我同学一句话就把我点醒了,首先搜出来的是Y M两个距离相差最小的相遇地点,却不是距离和最小的。

      所以,最后还要找出距离和最小的那个相遇地点。

 

View Code
 1 #include<iostream>    
 2 #include<queue>    
 3 #define inf 0x7f7f7f7f7f
 4 using namespace std;    
 5             
 6 char map[210][210];    
 7 typedef struct    
 8 {    
 9     int x ,y;    
10     int step;    
11 }node;    
12 int vis_Y[210][210];    
13 int vis_M[210][210];    
14 int vis[210][210];    
15 int end_step[210][210];    
16 int dx[4] = {0,1,0,-1};    
17 int dy[4] = {1,0,-1,0};    
18 int n , m;    
19             
20 int bfs(node &temp , int i , int flag)    
21 {    
22     temp.x += dx[i];    
23     temp.y += dy[i];    
24     if(temp.x<0||temp.x>=n||temp.y<0||temp.y>=m) return 0; //越界    
25     if(flag)    
26         if(vis_Y[temp.x][temp.y]) return 0;  //已经访问    
27     if(!flag)    
28         if(vis_M[temp.x][temp.y]) return 0;  //已经访问    
29     if(map[temp.x][temp.y] == '#')  return 0;    
30     else if(map[temp.x][temp.y] == '.')    
31     {    
32         if(flag) vis_Y[temp.x][temp.y] = 1;    
33         else vis_M[temp.x][temp.y] = 1;    
34     }    
35     else if(map[temp.x][temp.y] == '@')    
36     {    
37         if(flag) vis_Y[temp.x][temp.y] = 1;    
38         else vis_M[temp.x][temp.y] = 1;    
39         vis[temp.x][temp.y]++;    
40         end_step[temp.x][temp.y] += temp.step+1;    
41     }    
42     temp.step++;    
43     return 1;    
44 }    
45 int main()    
46 {    
47     int i , j , min;    
48     while(cin>>n>>m)    
49     {    
50         memset(vis_Y , 0 , sizeof(vis_Y));    
51         memset(vis_M , 0 , sizeof(vis_M));    
52         memset(vis , 0 , sizeof(vis));    
53         memset(end_step , 0 , sizeof(end_step));    
54         min = inf;    
55         queue<node>q_Y;    
56         queue<node>q_M;    
57         node start_Y , start_M;    
58         for(i = 0; i < n; i++)    
59         {    
60             getchar();    
61             for(j = 0; j < m; j++)    
62             {    
63                 scanf("%c" , &map[i][j]);    
64                 if(map[i][j] == 'Y')    
65                 {start_Y.x = i; start_Y.y = j; start_Y.step = 0; vis_Y[i][j] = 1;}    
66                 else if(map[i][j] == 'M')    
67                 {start_M.x = i; start_M.y = j; start_M.step = 0; vis_M[i][j] = 1;}    
68             }    
69             map[i][j] = '\0';    
70         }    
71         q_Y.push(start_Y);    
72         q_M.push(start_M);    
73         while(!q_Y.empty() && !q_M.empty())    
74         {    
75             int flag = 0;    
76             node  temp1 = q_Y.front();    
77             node  temp2 = q_M.front();    
78             q_Y.pop();  q_M.pop();    
79             for(i = 0; i < 4; i++)    
80             {    
81                 node temp3 = temp1;    
82                 node temp4 = temp2;    
83                 if(bfs(temp3 , i , 1))    
84                     q_Y.push(temp3);    
85                 if(bfs(temp4 , i , 0))    
86                     q_M.push(temp4);    
87             }    
88         }    
89         for(i = 0; i < n; i++)    
90             for(j = 0; j < m; j++)    
91                 if(vis[i][j] == 2)     
92                 {    
93                     if(min > end_step[i][j])    
94                         min = end_step[i][j];    
95                 }    
96         cout<<min*11<<endl;    
97     }    
98     return 0;    
99 }

 

转载于:https://www.cnblogs.com/nigel-jw/archive/2013/05/06/3063645.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Notepad++开发C#,一个复杂点的csscript脚本

使用Notepad开发C#&#xff0c;一个复杂点的csscript脚本&#xff1a; 12345678910111213141516171819//css_dir ....lib;//css_ref Geb.Image.dll;//css_ref Geb.Image.ShapeAnalysis.dll;//css_ref Geb.Utils.dll;//css_ref Geb.Utils.WinForm.dll;//css_co /unsafe; using S…

正则表达式里转义字符_五分钟搞定正则表达式,如果没搞定,再加两分钟

五分钟搞定正则表达式&#xff0c;如果没搞定&#xff0c;再加两分钟【这是 ZY 第 18 篇原创文章】 文章概览一、正则表达式介绍正则表达式&#xff0c;又称规则表达式。&#xff08;英语&#xff1a;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xf…

百度富文本编辑器,改变图片上传存储路径

我用的是最新版&#xff01; 找到以下2个关键文件&#xff1a; YourPath.../Ueditor/php/config.json YourPath.../Ueditor/php/Uploader.class.php config.json找到如下代码&#xff1a; "imagePathFormat": "...(这里不用管)",//找到imagePathFormat所在…

如何手动给Docker容器设置静态IP

2019独角兽企业重金招聘Python工程师标准>>> 要点&#xff1a; 1.首先需要在宿主机上虚拟出来一个真实可用桥接网卡比如br0 2.docker启动的时候默认使用br0进行桥接网络 3.创建docker容器的时候使用--netnone模式 4.手动为每个创建的容器生成静态ip。但是ip每次在重…

获取滚动条宽度代码(记录)

1.创建一个嵌套节点&#xff0c;让外层节点产生滚动条。 2.用offsetWidth - clientWidth 即可获得滚动条宽度。 为了避免页面抖动&#xff0c;可以设置外层元素position:absolute和visibility:hidden 代码如下&#xff1a; 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHT…

的函数原型_JS基础函数、对象和原型、原型链的关系

JS的原型、原型链一直是比较难理解的内容&#xff0c;不少初学者甚至有一定经验的老鸟都不一定能完全说清楚&#xff0c;更多的"很可能"是一知半解&#xff0c;而这部分内容又是JS的核心内容&#xff0c;想要技术进阶的话肯定不能对这个概念一知半解&#xff0c;碰到…

python字符串基本操作

直接上图&#xff1a; ispace()是否为空格 isupper()与islower是否为大写或小写 isdigit是否为数字 isalpha是否为字母 isalnum()是否为字母与数字混合体 startswith()与endswith()判断是否以什么开始&#xff0c;以什么结尾转载于:https://www.cnblogs.com/bestSmile/p/405550…

迁移学习自我学习

最近在看Ng的深度学习教程&#xff0c;看到self-taught learning的时候&#xff0c;对一些概念感到很陌生。作为还清技术债的一个环节&#xff0c;用半个下午的时间简单搜了下几个名词&#xff0c;以后如果会用到的话再深入去看。 监督学习在前一篇博客中讨论过了&#xff0c;这…

堰流实验报告思考题_堰流流量系数测定实验

二、实验操作部分1&#xff0e;实验操作过程(可用图表示)2&#xff0e;实验数据、表格及数据处理3&#xff0e;结论1.实验步骤(1)放水之前&#xff0c;用活动测针测出堰前槽底高程▽低和堰顶高程▽堰顶&#xff0c;堰高P▽堰顶-▽底。(2)关闭首部的泄水阀&#xff0c;打开进水阀…

WCF全双工以及用户名密码验证

WCF是支持TCP双向连接的&#xff0c;支持Server和Client之间互发协议&#xff0c;通过 订阅-发布 的全双工形式实现&#xff0c;全双工的用户名密码验证需要X509证书加密&#xff0c;单工模式的用户名密码验证时&#xff0c;X509证书是可选的。 在全双工模式下&#xff0c;会有…

MTV: Django眼中的MVC

URLconfMTV&#xff1a;Django眼中的MVC MVC是众所周知的模式&#xff0c;即&#xff1a;将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器)。其中&#xff1a;M 管理应用程序的状态&#xff08;通常存储到数据库中&#xff09;&#xff0c;并约束改…

createbitmap导致的内存泄漏如何处理_C++ 如何避免内存泄漏,一篇就够

前言近年来&#xff0c;讨论 C 的人越来越少了&#xff0c;一方面是由于像 Python&#xff0c;Go 等优秀的语言的流行&#xff0c;另一方面&#xff0c;大家也越来越明白一个道理&#xff0c;并不是所有的场景都必须使用 C 进行开发。Python 可以应付大部分对性能要求不高的场景…

Visio绘制功能分解图

为什么要绘制功能分解图&#xff1f; 对于编程人员来说&#xff0c;具体分配任务的时候&#xff0c;必须知道自己要做什么&#xff0c;必须了解系统的大体框架。功能分解图可以帮助我们理清程序的框架&#xff0c;便于大局观的掌握。 用Visio2010创建功能分解图 1、选择模版 2、…

Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具(转)

转自&#xff1a;http://www.csdn.net/article/2013-05-02/2815116-introduce-from-mozilla-heka-go摘要&#xff1a;一直崇尚开源的Mozilla近日释放了Heka测试版——插件架构&#xff0c;Go编写。在支持使用Go扩展功能的同时&#xff0c;还通过允许“Sandboxed Filters”提供了…

cocos2d学习笔记2——学习资源

1. 视频 找了好几个视频&#xff0c;有一些讲得好的文件资源没有&#xff0c;后来终于找到一个讲得不错还有文件资源的&#xff0c;还有高清下载地址&#xff0c;虽然是2.2版本的&#xff0c;但是确实能学到不少东西&#xff0c;对用cocos2d做游戏有了基本的印象&#xff0c;对…

深究标准IO的缓存

前言 在最近看了APUE的标准IO部分之后感觉对标准IO的缓存太模糊&#xff0c;没有搞明白&#xff0c;APUE中关于缓存的部分一笔带过&#xff0c;没有深究缓存的实现原理&#xff0c;这样一本被吹上天的书为什么不讲透彻呢&#xff1f;今天早上爬起来赶紧找了几篇文章看看&#x…

环境变量_配置JAVA环境变量

本文标识 : J00001本文编辑 : YiKi编程工具 : IDEA阅读时长 : 3分钟什么是环境变量?环境变量是在操作系统中一个具有特定名字的对象&#xff0c; 它包含了一个或者多个应用程序所将使用到的信息。为什么要配置环境变量?为了方便在控制台编译和运行java程序&#xff0c;不…

GotFocus和PreviewLeftButtonDown事件

当TextBox获得焦点后&#xff0c;其中的文字会被全选。通过GotFocus和PreviewLeftButtonDown事件&#xff0c;就可以模拟上述行为。 如果用户只是用键盘操作&#xff0c;GotFocus事件就足够了。 如果使用鼠标操作&#xff0c;就要用到2个事件了。TextBox会将光标放在鼠标单击的…

模式主节点ORACLE DG介绍(物理无实例)

在本文中,我们主要介绍模式主节点的内容,自我感觉有个不错的建议和大家分享下 DG的三种模式&#xff1a; 硬件以及操纵系统需求&#xff1a; 每日一道理 流逝的日子像一片片凋零的枯叶与花瓣&#xff0c;渐去渐远的是青春的纯情与浪漫。不记得曾有多少雨飘在胸前风响在耳畔&…

分布式消息队列 Kafka

分布式消息队列 Kafka 2016-02-25 杜亦舒Kafka是一个高吞吐量的、分布式的消息系统&#xff0c;由Linkedin开发&#xff0c;开发语言为scala具有高吞吐、可扩展、分布式等特点 适用场景 活动数据统计活动数据包括页面访问量&#xff08;Page View&#xff09;、被查看内容方面的…