题目大意:小hi和小ho去咖啡厅喝咖啡,咖啡厅可以看作是n * m的矩阵,每个点要么为空,要么被人、障碍物、椅子所占据,小hi和小ho想要找两个相邻的椅子。起初两个人都在同一个点,求两人到达满足要求的椅子所移动的最少步骤。

思路:先BFS找出每个S到达每个椅子的最短路径长度,然后遍历每一行和每一列找出最优解。

代码:

#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
#include<cstdlib>
#define INF 100000000
using namespace std;int n,m,d[10010],dir[4][2] = {-1,0,1,0,0,-1,0,1};
bool vis[10010];
char ch[110][110];
queue<int>Q;void bfs(int sx,int sy){int i,j,k;for(i=0;i<n;i++)for(j=0;j<m;j++){k = i*m + j;vis[k] = false;d[k] = INF; }k = sx * m + sy ; d[k] = 0;while(!Q.empty())Q.pop();Q.push(k);while(!Q.empty()){int x = Q.front();int tx = x/m ;int ty = x%m ; Q.pop();if(vis[x])continue;vis[x] = true;for(i=0;i<4;i++){int ex = tx + dir[i][0];int ey = ty + dir[i][1];if(ex<0 || ex>=n || ey<0 || ey>=m || ch[ex][ey] == '#' || ch[ex][ey] == 'P')continue;k = ex*m + ey;if(vis[k])continue;if(ch[ex][ey] == 'S'){d[k] = d[k] < d[x] + 1 ? d[k] : d[x] + 1;continue;}d[k] = d[k] < d[x] + 1 ? d[k] : d[x] + 1;Q.push(k);}}
}int main(){int i,j,p1,p2,ans,sx,sy;bool tag;while(scanf("%d%d",&n,&m) == 2){ans = INF;bool flag = false;for(i=0;i<n;i++)scanf("%s",ch[i]);for(i=0;i<n && !flag;i++)for(j=0;j<m && !flag;j++)if(ch[i][j] == 'H'){sx = i;sy = j;flag = true;}bfs(sx,sy);int t1,t2;for(i=0;i<n;i++){p1 = p2 = INF ;for(j=0;j<m;j++){if(ch[i][j] == 'S'){int temp = d[i*m+j];if(p1 == INF)p1 = temp;else if(p2 == INF){p2 = temp;ans = ans < p1 + p2 ? ans : p1 + p2 ;p1 = p2;p2 = INF ;}}else if(ch[i][j] == 'P' || ch[i][j] == '#' || ch[i][j] == '.'){p1 = INF ;p2 = INF ;}}}for(j=0;j<m;j++){p1 = p2 = INF ;for(i=0;i<n;i++){if(ch[i][j] == 'S'){int temp = d[i*m+j];if(p1 == INF)p1 = temp;else if(p2 == INF){p2 = temp;ans = ans < p1 + p2 ? ans : p1 + p2 ;p1 = p2;p2 = INF ;}}else if(ch[i][j] == 'P' || ch[i][j] == '#' || ch[i][j] == '.'){p1 = INF ;p2 = INF ;}}}if(ans < INF)printf("%d\n",ans);elseprintf("Hi and Ho will not have lunch.\n");}return 0;
}

转载于:https://www.cnblogs.com/jxgapyw/p/4845348.html

hihoCoder 1092 : Have Lunch Together相关推荐

  1. 微软校招笔试题#1092 : Have Lunch Together详解以及源码分析

    #1092 : Have Lunch Together 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Everyday Littile Hi and Little Ho ...

  2. 少样本学习原理快速入门,并翻译《Free Lunch for Few-Shot Learning: Distribution Calibration》

    ICLR2021 Oral<Free Lunch for Few-Shot Learning: Distribution Calibration> 利用一个样本估计类别数据分布 9行代码提 ...

  3. Late Lunch Talk: Time to consider using PacBio’s long read sequencing in your research?

    Late Lunch Talk: Time to consider using PacBio's long read sequencing in your research? Late Lunch T ...

  4. Free Lunch for Few-Shot Learning: Distribution Calibration(ICLR 2021)

    论文笔记 FSL 7]Free Lunch for Few-Shot Learning: Distribution Calibration(ICLR 2021) 下载地址 | 论文源码

  5. hihoCoder 网络流四·最小路径覆盖

    题面带解释 hihoCoder感觉很好. 网络流的精华就是建图 #include<cstdio> #include<iostream> #include<algorith ...

  6. hihoCoder #1142 : 三分求极值

    #1142 : 三分·三分求极值 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一 ...

  7. hihocoder 后缀自动机专题

    一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...

  8. hihoCoder 1051 补提交卡(贪心,枚举)

    #1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过 ...

  9. hihoCoder week3 KMP算法

    题目链接 https://hihocoder.com/contest/hiho3/problems kmp算法 #include <bits/stdc++.h> using namespa ...

最新文章

  1. 银行的清算、清分、结算、对账
  2. 使用Dockerfile构建镜像
  3. 欢迎您参加_ADT技术培训营
  4. Could not find a package,configuration file provided by G2O ,G2OConfig.cmake,g2o-config.cmake
  5. oracle的iw算法,[转载]Oracle日期周详解IW
  6. Flink官网自学笔记
  7. CentOS 6.9编译安装新版本内核
  8. 未定义标识符 stringc/c++(20)_天津港20款丰田塞纳四驱顶配现车价格优惠
  9. 经典:趣解什么叫网关?
  10. StringRedisTemplate和RedisTemplate区别和联
  11. red hat linux 7.1 使用手册!,linux入门教材(Red Hat Linux 7.1)
  12. 关系图谱在风控体系的应用与实践
  13. 基于颜色特征的图像检索(一)
  14. 信息系统项目管理师知识总结
  15. vue使用element-ui 实现多套自定义主题快速切换
  16. Nvidia Agx Xavier平台10Gb PCIE网卡速度限制为1Gb问题调试记录
  17. npm ERR! code EINTEGRITY
  18. OpenCV--边缘保留滤波(EPF)
  19. ios越狱设备在线安装ipa方法
  20. 遇到.dll文件删不掉怎么办?来这里教你一招删掉。(亲自实用)

热门文章

  1. ios 开发设置左滑退出_苹果铃声怎么设置自己的歌?教你用手机快速搞定!
  2. 【WebRTC---入门篇】(一)WebRTC整体架构
  3. C语言 | 循环语句总结
  4. php简单网站源码包含数组_PHP无限分级阶梯递归数组排列 以及多层嵌套数组在网页中的解析源码...
  5. 牛客网数据开发题库_数据库刷题—牛客网(21-30)
  6. C++中 Vector使用方法
  7. 光端机和收发器的区别有哪些?
  8. 工业级光纤收发器使用“避坑”指南
  9. 【渝粤题库】陕西师范大学152108 电子政务理论与实践 作业(高起专)
  10. 【渝粤题库】国家开放大学2021春2224物业管理法规题目