Pro

Luogu2208

Sol

做这道题把我给做颓废了,也做气了说实话,一开始我连题目都没弄明白,正好教练不在,而且就我一个人在机房,于是打算看题解把这道题的意思给看明白,但是题解看了半天,发现洛谷上三篇题解的脑洞真的无语,题解不好好写,一句话带过,但你最起码坐标系都不太一样得说一下吧,唉。题解里面的三篇废话了半天,都说的搜索但都没说明白,我们都知道考得搜索,你只做对了细节都不提的,写什么题解。

–以上纯属吐槽,无恶意,为我浪费了一下午的时间而感慨。–

这道题,最短路可做。建图就先不说了,然后就是类似搜索的spfa,在搜索之前,先判断一个条件,这就得回到题目中来,题目中说,不满足1和2的才做3,那么我们就应该判断一下是否满足1和2,我就是陷在这里面好长时间,(吐槽就不多吐槽了),如果都不满足,再做3。做3的时候,分三种,左,右,翻转重力。路径的长度,就是翻转的次数,所以最后最短路就是最少的翻转次数。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;const int L = 505;
struct Node {int x , y , flag;Node(){}Node(int _x , int _y , int _flag) {x = _x ; y = _y ; flag = _flag;}
};
int n , m , Cx , Cy , Dx , Dy , map[L][L];
int d[L][L][2] , vis[L][L][2] , ans;
queue<Node>q;void upd(Node u , Node v) {if(d[u.x][u.y][u.flag] < d[v.x][v.y][v.flag]) {d[v.x][v.y][v.flag] = d[u.x][u.y][u.flag] + (u.flag==v.flag?0:1);if(!vis[v.x][v.y][v.flag]) {vis[v.x][v.y][v.flag] = 1;q.push(v);      }   }
}int spfa() {memset(d , 0x3f , sizeof(d));memset(vis , 0 , sizeof(vis));q.push(Node(Cx , Cy , 1));vis[Cx][Cy][1] = 1;d[Cx][Cy][1] = 0;while(!q.empty()) {Node u = q.front();q.pop();vis[u.x][u.y][u.flag] = 0;int dx = (u.flag==1?1:-1);if(u.x + dx >= 1 && u.x + dx <= n) {if(!map[u.x+dx][u.y])upd(u , Node(u.x+dx,u.y,u.flag));else {if(u.y+1<=m && !map[u.x][u.y+1])upd(u , Node(u.x,u.y+1,u.flag));if(u.y-1>=1 && !map[u.x][u.y-1])upd(u , Node(u.x,u.y-1,u.flag));upd(u,Node(u.x,u.y,u.flag^1));}}}return min(d[Dx][Dy][0],d[Dx][Dy][1]);
}int main() {scanf("%d%d",&n,&m);for(int i=1; i<=n; i++)for(int j=1; j<=m; j++) {char c;cin>>c;if(c == 'C')Cx = i , Cy = j;if(c == 'D')Dx = i , Dy = j;if(c == '#')map[i][j] = 1;elsemap[i][j] = 0;}ans = spfa();if(ans == 0x3f3f3f3f)printf("-1");elseprintf("%d",ans);return 0;
}

[USACO13OPEN]What's Up With Gravityp【最短路 / SPFA】相关推荐

  1. 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA

    洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA 二分交费最多的一次的钱数 然后只将符合要求的边加入图中 如果到终点的最短路大于等于血量 或者直接起点不能到达终点 那么说明不符合要求 需要 ...

  2. 图论刷水题记录(二)(最短路-----SPFA算法)

    继第一篇的后续,又来刷水题了,写的是SPFA算法,这个算法的复杂度比较玄学,感觉能不用就不用了,但是他的好处就是可以判断负圈. 3月26日: 1.POJ 1847 Tram 题意:在一个交通网络上有N ...

  3. 单源最短路 SPFA 算法模板

    简介 在图论中,最短路是十分重要的一部分,在很多问题中都有涉及 而现在所讲的 SPFA 算法是十分优秀的算法,时间复杂度为 O(k∗E)O(k*E) 其中 EE 是图的边数,而 kk 是一个常数,一般 ...

  4. POJ 3259 Wormholes【最短路/SPFA判断负环模板】

    农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的前达到目的地!他的N(1≤N≤500)个农场被编号为1..N,之间有M(1≤M≤2500)条路径 ...

  5. POJ - 2449 Remmarguts' Date(第k短路:spfa+A*)

    题目链接:点击查看 题目大意:给出一个有向图,求第k短路 题目分析:偷学了一波A*,本来以为是多难的算法,其实就是bfs+优先队列的升级版,之前看的那些博客写的都太深奥了,以至于看了一半啥都没看懂然后 ...

  6. 【bzoj1726/Usaco2006 Nov】Roadblocks第二短路——SPFA

    题目链接 分析:题目要求一个连通图的从1到n的严格次短路,我们只需要在跑最短路的时候顺便判一下次短路是否能够被更新即可. dis[x][0]表示1到x的最短路,而dis[x][1]则表示次短路,需要分 ...

  7. jzoj1267-路障【最短路,SPFA】

    正题 大意 一张无向图,求次短路. 解题思路 我们先求出最短路并且求出点1和点n到每个点的距离,然后枚举边,将第一个点离点1的距离,和第二个点离点n的距离加上边权如果不是最短路就记录,然后取最小值. ...

  8. 洛谷P2296-寻找道路【日常图论,最短路,SPFA】

    题目 一个有向图,要求满足要求的最短路径,要求为: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 输入1 3 2 (3个点,2条边) 1 2 (1和2之间可以连接) 2 1 1 3 (从1到 ...

  9. 洛谷P1346-电车【日常图论,最短路,SPFA】

    题目 一个有向图,每个点有个默认方向和若干个其他方向,走默认方向权值为0,其他方向权值为1,求最短路 输入 3 2 1(3个点,点2到点1) 2 2 3(2个点,起点为1,2为默认点,3为其他点) 2 ...

最新文章

  1. Java多线程-生产者与消费者
  2. 查看 rabbitmq 启动websocket 提示404_RabbitMQ 部署记录
  3. Dedecms 最新版漏洞收集并复现学习
  4. a除b的余数【取模(%)与取余(/)的区别】
  5. 今日上新:两个图像领域的现金奖励实时竞赛
  6. libevent在windows平台下通过vs进行编译
  7. 2018_11_05_珍惜少年时
  8. 前端商城vue项目案例1
  9. 奶爸日记3 - 给鑫鑫做的第一顿饭
  10. Linux USB 摄像头驱动
  11. Xenserver命令大全
  12. oracle数据库: ORA-01775: 同义词的循环链问题
  13. item_half - 淘宝每日半价接口
  14. Unity-动画-动画回调函数接口StateMachineBehaviour
  15. 关于桌面发布时报错Failed Read-only file system
  16. cli命令行配置路由器_H3C MSR 系列路由器 命令参考(V7)-6W103
  17. 神州泰岳测试试题(笔试)
  18. Java实战之亲戚关系计算器(swing版)(2)——功能介绍
  19. js写距离生日还有多少天
  20. MATLAB--数字图像处理 添加椒盐噪声

热门文章

  1. 4.XXE (XML External Entity Injection)
  2. git的安装和简单使用
  3. vim的几个常用操作
  4. vim 使用、设置笔记
  5. PHP对自己I/O流访问的封装(转)
  6. [译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)
  7. 单循环链表(用尾指针表示)
  8. android.content.res.Resources$NotFoundException: String resource ID #0x0
  9. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除...
  10. Go Revel - Filters(过滤器链)