题目链接:图图

思路:
有两种情况:
1.直接跳过门,从起点走到终点。
2.从起点–钥匙–门–终点。

比较这两种方法的路径即可(要注意一些细节)。

代码:

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=509;
char mapp[maxn][maxn];
int vis[maxn][maxn];struct node
{int x,y;int step;
};
int go[4][2]= {1,0,-1,0,0,1,0,-1};
int spfa(node s,node t)
{memset(vis,0,sizeof(vis));queue<node>q;while(!q.empty())q.pop();q.push(s);vis[s.x][s.y]=1;node p1,p2;while(!q.empty()){p1=q.front();if(p1.x==t.x&&p1.y==t.y)break;q.pop();for(int i=0; i<4; i++){int xx=go[i][0]+p1.x,yy=go[i][1]+p1.y;if(!vis[xx][yy]&&mapp[xx][yy]!='W'&&mapp[xx][yy]!='D')//因为都要用,所以要分清哪些点是都能走的。{vis[xx][yy]=1;p2.x=xx,p2.y=yy;p2.step=p1.step+1;q.push(p2);}}}if(q.empty())return -1;while(!q.empty())q.pop();return p1.step;
}int main()
{int n,m;while(~scanf("%d%d",&n,&m)){node ss,tt,dd,kk;for(int i=0; i<n; i++){scanf("%s",mapp[i]);for(int j=0; j<m; j++){if(mapp[i][j]=='S')ss.x=i,ss.y=j,ss.step=0;if(mapp[i][j]=='E')tt.x=i,tt.y=j,tt.step=0;if(mapp[i][j]=='D')dd.x=i,dd.y=j,dd.step=0;if(mapp[i][j]=='K')kk.x=i,kk.y=j,kk.step=0;}}int len1=spfa(ss,tt);int len2_1=spfa(ss,kk);mapp[dd.x][dd.y]='.';//这里一定要将门变成能走的点,否则没法到达,可以不用再还原了(没有影响)int len2_2=spfa(kk,dd);int len2_3=spfa(dd,tt);if(len2_1==-1||len2_2==-1||len2_3==-1)printf("%d\n",len1);else if(len1==-1)printf("%d\n",len2_1+len2_2+len2_3);elseprintf("%d\n",min(len1,len2_1+len2_2+len2_3));}return 0;
}

牛客网 D-图图(广搜)相关推荐

  1. 牛客网 New Game! 建图+最短路

    链接:https://www.nowcoder.com/acm/contest/201/L 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  2. 【牛客 - 188C】水图(bfs树的直径,思维)

    题干: 链接:https://ac.nowcoder.com/acm/contest/188/C 来源:牛客网 小w不会离散数学,所以她van的图论游戏是送分的 小w有一张n个点n-1条边的无向联通图 ...

  3. Day5.牛客网剑指offer 67题之43-54题(java代码)

    文章目录 Day5.牛客网剑指offer 67题之43-54题 43.左旋转字符串 44.翻转单词顺序列 45.扑克牌顺序 46.孩子们的游戏 47.求1+2+...+n 48.不用加减乘除做加法 4 ...

  4. 【转自牛客网】C++类职位校招

    作者:./a.out 链接:https://www.nowcoder.com/discuss/14022 来源:牛客网 话说在牛客网上混迹了半年,也没啥拿的出手的贡献.现在基本上自己的校招生涯要告一段 ...

  5. 牛客网比赛-Wannafly挑战赛27

    无关前置 最近同学都在打牛客网的比赛并且博主也在写一下牛客网的题,博主就去看了看,打了一场,题目质量还是非常不错的.我才不会告诉你我没开long long错了好久QWQ 212A-灰魔法师 题意简述 ...

  6. 今日头条后端面经总结(2018.12月)(转自牛客网)

    面经(后端): 一 操作系统中的进程和线程还有虚拟存储. 计算机网络TCP和UDP仔细看一下,也不要放过滑动窗口; 还有计算机网络体系结构各层都要熟悉. lambda表达式 spring 智力题,比如 ...

  7. 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库

    牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...

  8. 九、为了OFFER而战,那些日子在牛客网刷Linux面试题(下)

    @Author:Runsen @Date:2020/9/11 文章是Runsen在Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到CSD ...

  9. 框架复习笔记-Java-案例:牛客网讨论社区

    文章目录 搭建开发环境 Spring入门 Spring IoC实例分析 Spring MVC入门 请求 响应 Mybatis入门 案例:开发者社区首页 调试技巧 日志 版本控制-Git 发送邮件 开发 ...

  10. 牛客网 【每日一题】8月5日题目精讲—蓝魔法师

    来源:牛客网: 文章目录 题目描述 题解: 代码: 题目描述 "你,你认错人了.我真的,真的不是食人魔."–蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于 ...

最新文章

  1. Matlab读写二进制文件
  2. 自定义控件之onMeasure
  3. [BZOJ2179]FFT快速傅立叶
  4. php随机生成验证码代码
  5. Map value类型不同的写法
  6. css高度已知,左右定宽,中间自适应三栏布局
  7. JavaScript之Ajax-1 Ajax(Ajax原理、Ajax对象属性和方法)
  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点...
  9. Altium差分布线和等长方法
  10. NVIDIA显卡驱动重装
  11. [C语言]一百个奥特曼大战一百个怪兽 源代码
  12. 替罪羊树(Scapegoat Tree)
  13. 发那科2021参数_FANUC常用参数
  14. S32K FTM(FlexTimer module)详解
  15. C语言如何实现寻找峰值函数,findpeaks 寻找峰值函数
  16. C++读入用逗号隔开的数据
  17. 关于oppo和vivo这两年强势崛起的反思
  18. 首次!嫦娥四号成功软着陆月球背面,中国探测器完成人类航天史壮举...
  19. 一篇流水账,纪念金庸大侠
  20. console方法:

热门文章

  1. 飞塔防火墙之ACL配置
  2. element-ui中select组件创建条目创建条目为空时报错的解决方案
  3. 甩开三星自己干,苹果第一块自研屏幕要来了?
  4. ByteDance字节跳动张一鸣:如何阅读、如何了解自己、如何与人沟通沟通、如何安排时间、如何正确的看待别人意见、如何激励自己、如何写作、如何坚持锻炼身体、如何耐心?...
  5. 一个三流学校程序员的奋斗!(转)
  6. 数据分析报告,就该这么写!超详细攻略奉上
  7. (转载)Linux内核源代码情景分析---第四章 进程与进程调度
  8. 详细区分offsetX,clientX,pageX,screenX,layerX和X的区别
  9. 【VREP】四舵轮(or n舵轮)自旋与平移融合运动解算
  10. SUMPRODUCT函数使用方法及示例