博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU - 2612 bfs [kuangbin带你飞]专题一
阅读量:5138 次
发布时间:2019-06-13

本文共 1504 字,大约阅读时间需要 5 分钟。

    分别以两个人的家作为起点,bfs求得到每个KFC最短距离。然后枚举每个KFC,求得时间之和的最小值即可。

此题不符合实际情况之处:  通过了一个KFC再去另一个KFC可以吗? 出题人都没好好想过吗?

AC代码

#include
#include
#include
#include
using namespace std;const int maxn = 200 + 5;int d[2][maxn][maxn];const int dx[] = {1,-1,0,0};const int dy[] = {0,0,-1,1};struct node{ int x, y; node(){ } node(int x, int y):x(x), y(y){ }};int n, m;char G[maxn][maxn];bool in(int x , int y){ if(x < 0 || y < 0 || x >= n || y >= m) return false; return true;}void bfs(int x, int y, int c){ queue
q; d[c][x][y] = 0; q.push(node(x, y)); while(!q.empty()){ node p = q.front(); q.pop(); x = p.x, y = p.y; for(int i = 0; i < 4; ++i){ int px = x + dx[i], py = y + dy[i]; if(!in(px, py) || G[px][py] == '#' || d[c][px][py] != -1) continue; d[c][px][py] = d[c][x][y] + 1; //if(G[px][py] != 'Y' && G[px][py] != 'M' && G[px][py] != '@') q.push(node(px, py)); } }}int main(){ while(scanf("%d%d", &n, &m) == 2){ memset(d, -1, sizeof(d)); for(int i = 0; i < n; ++i) scanf("%s", G[i]); for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j){ if(G[i][j] == 'Y') bfs(i, j, 0); else if(G[i][j] == 'M') bfs(i, j, 1); } int ans = 1 << 30; for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j){ if(G[i][j] == '@' && d[1][i][j] != -1 && d[0][i][j] != -1){ ans = min(ans, d[0][i][j] + d[1][i][j]); } } printf("%d\n", ans * 11); } return 0;}
如有不当之处欢迎指出!

转载于:https://www.cnblogs.com/flyawayl/p/8305445.html

你可能感兴趣的文章
常用的adb命令
查看>>
Mycat 配置文件schema.xml
查看>>
【排序】绝境求生
查看>>
观察者模式(Observer Pattern)
查看>>
[深度学习]开源的深度学习框架
查看>>
算法图解笔记
查看>>
HashMap源码解析
查看>>
DVWA笔记之三:CSRF
查看>>
Dockerfile分享之SSH Server
查看>>
Linq to SQlite的使用
查看>>
HDU 1069 [Monkey and Banana] 动态规划
查看>>
使用Redshift渲染器,怎么选电脑配置!
查看>>
vue-element:文件上传七牛之key和异步的问题
查看>>
【BZOJ2631】tree (LCT)
查看>>
python常用代码笔记
查看>>
机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者...
查看>>
AJAX 跨源 HTTP 请求
查看>>
Web 项目系列之浏览器机制(一)
查看>>
IOS真机调试
查看>>
IOS正则表达式的用法简介
查看>>