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,一经查实,立即删除!

相关文章

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

五分钟搞定正则表达式&#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每次在重…

的函数原型_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;这…

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;对…

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

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

分布式消息队列 Kafka

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

漫游飞行_手机“飞行模式”为何没被淘汰?内行人坦言:其实是你不会用!

随着科技的不断创新&#xff0c;目前市面上出现的手机款式多种多样&#xff0c;品牌也非常多&#xff0c;有华为、苹果、三星和小米等等。手机的屏幕也是五花八门&#xff0c;有刘海屏、水滴全面屏等&#xff0c;这些屏幕之间都各有不同。而且手机的更新换代速度很快&#xff0…

multiselect多选下拉框

具体实现 <input type"hidden" id"q_dueDay" name"q_dueDay" value"${baseQueryBean.q_dueDay}">//这个为隐藏域后台直接使用这个为参数 <select id"example" name"example" multiple"multiple&qu…

scikit-learn点滴

scikit-learn点滴 scikit-learn是非常漂亮的一个机器学习库,在某些时候,使用这些库能够大量的节省你的时间,至少,我们用Python,应该是很难写出速度快如斯的代码的. scikit-learn官方出了一些文档,但是个人觉得,它的文档很多东西都没有讲清楚,它说算法原理的时候,只是描述一下,除…

怎样搭建Android开发平台(转)

Android是基于Linux内核的软件平台和操作系统&#xff0c;是Google在2007年11月5日公布的手机系统平台&#xff0c;早期由Google开发&#xff0c;后由开放手机联盟&#xff08;Open Handset Alliance&#xff09;开发。 它采用了软件堆层&#xff08;software stack&#xff0c…

subject.login(token)是如何确认账号密码的_教你如何删除、关闭、注销微信小程序...

微信小程序是我们日常生活中经常会接触到的工具&#xff0c;打开小程序后&#xff0c;它就会留在我们微信的”“发现-小程序”栏。很多人并不知道该如何删除、关闭小程序&#xff0c;所以今天就跟大家科普下相关问题。1.如何删除小程序首先&#xff0c;打开微信界面&#xff0c…

上海交通大学2006年数学分析考研试题

转载于:https://www.cnblogs.com/zhangzujin/p/4078900.html

出现的是乱码_cad状态栏出现了方框乱码怎么办?

左下角阅读原文看CAD视频好课推荐&#xff1a;1、CAD2014&#xff1a;点击查看 2、室内&全屋&#xff1a;点击查看 3、CAD2019&#xff1a;点击查看4、CAD2018&#xff1a;点击查看5、Bim教程&#xff1a;点击查看6、室内手绘&#xff1a;点击查看7、CAD三维&#xff1a;点…