HDU2612 Find a Way BFS
题意:
yifenfei和merceki要去KFC聚会,给出一个地方的地图,n*m,有若干个个KFC,然后他们每走一步需要11分钟(注意:这里时间不能重叠的,比如yi走了一步,me也是走了一步,则一共的时间为2*11,而不是1*11),问他们在哪个KFC聚会所花的时间最少,输出最少的时间。
这道题我本来是想,枚举每一个KFC,分别对每一个KFC进行2次BFS,求出去每一个KFC所花的时间。觉得这样很慢吧。
后来就是,先对yi,求出他到每一个KFC的时间,记录下来,再对me,求出他到每一个KFC的时间,记录下来,再选择哪个好,这样一共只需要2次BFS就ok了。
ac代码:
1 #include<cstdio> 2 #include<queue> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 const int maxn=210; 7 int y[maxn][maxn]; 8 int k[maxn][maxn]; 9 char maze[maxn][maxn]; 10 int dx[4]={0,0,-1,1}; 11 int dy[4]={1,-1,0,0}; 12 int n,m; 13 bool vis[maxn][maxn]; 14 struct Point 15 { 16 int x,y,step; 17 }; 18 void bfs(int i,int j,int who) 19 { 20 memset(vis,false,sizeof(vis)); 21 Point s; 22 s.x=i; 23 s.y=j; 24 s.step=0; 25 queue<Point>que; 26 while(!que.empty()) 27 que.pop(); 28 que.push(s); 29 vis[i][j]=true; 30 while(!que.empty()){ 31 Point u=que.front(); 32 que.pop(); 33 if(maze[u.x][u.y]=='@'&&who==1){ 34 y[u.x][u.y]=u.step; 35 } 36 else if(maze[u.x][u.y]=='@'&&who==2){ 37 k[u.x][u.y]=u.step; 38 } 39 for(int i=0;i<4;i++){ 40 Point du; 41 du.x=u.x+dx[i]; 42 du.y=u.y+dy[i]; 43 du.step=u.step+1; 44 if(du.x>=0&&du.x<n&&du.y>=0&&du.y<m&&maze[du.x][du.y]!='#' 45 &&!vis[du.x][du.y]){ 46 que.push(du); 47 vis[du.x][du.y]=true; 48 } 49 } 50 } 51 } 52 int main() 53 { 54 while(scanf("%d%d",&n,&m)!=EOF){ 55 char s[maxn]; 56 for(int i=0;i<n;i++){ 57 scanf("%s",&s); 58 for(int j=0;j<m;j++) 59 maze[i][j]=s[j]; 60 } 61 memset(y,-1,sizeof(y)); 62 memset(k,-1,sizeof(m)); 63 for(int i=0;i<n;i++){ 64 for(int j=0;j<m;j++){ 65 if(maze[i][j]=='Y'){ 66 bfs(i,j,1); 67 } 68 else if(maze[i][j]=='M') 69 bfs(i,j,2); 70 } 71 } 72 int ans=0x3f3f3f3f; 73 for(int i=0;i<n;i++) 74 for(int j=0;j<m;j++){ 75 if(y[i][j]!=-1&&k[i][j]!=-1&&y[i][j]+k[i][j]<ans) 76 ans=y[i][j]+k[i][j]; 77 } 78 printf("%d\n",ans*11); 79 } 80 return 0; 81 }
View Code
转载于:https://www.cnblogs.com/-maybe/p/4379163.html
HDU2612 Find a Way BFS相关推荐
- kuangbin 专题一 简单搜索
kuangbin 专题一 简单搜索 1.POJ1321棋盘问题[DFS] 代码 自己的想法 2.POJ2251Dungeon Master[三维空间BFS] 代码 自己的想法 3.POJ3278 Ca ...
- HDU2612(BFS算法)
Problem Descrption Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Le ...
- 22.11.27补卡 HDU-2612 bfs
这题dfs没法写, 因为dfs没法处理最优解的情况 分别记录每个人走每一个kfc的最短路径 然后一个双重循环搜最小值就好了 初始化记得初始化为最大值, 不然有可能影响最min取值 ps: 这题我用st ...
- 【HDU - 2612】Find a way(bfs)
-->Find a way 直接上Chinese Descriptions: hsj和lsh最近迷上了pokemon go的游戏.在双十一大物期中考试来临之前,他们想抓一只稀有土拨鼠来攒攒人品 ...
- 搜索入门之BFS宽度优先搜索
基础搜索入门BFS BFS全称宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽 ...
- HDU-1459.非常可乐(BFS )
这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...
- HDU1548:A strange lift(Dijkstra或BFS)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 题意:电梯每层有一个数,例如第n层有个数k, 那么这一层只能上k层或下k层,但是不能低于一层或高 ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- usaco Overfencing 穿越栅栏(BFS)
Overfencing 穿越栅栏 农夫 John 在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出 了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个" ...
最新文章
- CRM中Plugin开发如何将功能放入多个模块
- 数据统计之月增用户统计
- 企业管理,难的是什么?
- c语言结构体如何定义字母,c语言中定义结构体如何定义?
- 异常详细信息: System.ArgumentException: 不支持关键字: “metadata”。
- 学习笔记(31):Python网络编程并发编程-定时器
- matplotlib可视化_使用Matplotlib改善可视化设计的5个魔术技巧
- 2019年大数据发展趋势预测
- python程序设计基础第三版_Python程序设计(第三版)PPT及源码
- 这位 50 岁的海归程序员,当着老板还在天天改 Bug
- 程序相关概念及OS Linux发行版
- [微信小程序开发] mpvue 微信小程序开发使用SASS写样式
- 一维卷积神经网络应用,二维卷积神经网络原理
- 如何用计算机测量图片景深,景深(摄影测量与遥感学术语 .)_百度百科
- 8.3 Convex combinations (凸组合)
- 朋友圈图片评论功能,来了!
- python使用requests爬取淘宝搜索页数据
- Navicata查看已经创建MySql的触发器
- android线程间通信的几种方法_Android进程间和线程间通信方式
- byte数组转blob类型_Jfinal 存byte[] 到mysql数据库中blob类型