Luogu P3956

本题是一道简单的SPFA

具体看程序

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int wayx[4]={1,0,-1,0},wayy[4]={0,1,0,-1};//4个方向
  5. int n,m,cost[200][200],a[200][200],magic[200][200],x,y,c;
  6. bool visit[200][200];//标志某个点有没有在队列里面
  7. struct data
  8. {
  9. int x,y;
  10. }que[100000];//队列内的点的坐标
  11. void first()
  12. {
  13. for (int i=1;i<=m;i++)
  14. for (int j=1;j<=m;j++)
  15. cost[i][j]=2147483640;
  16. cost[1][1]=0;
  17. //初始化,起点价值为0,其他均为无穷大
  18. }
  19. void spfa()//程序主体 SPFA
  20. {
  21. int head=0,tail=1;
  22. que[head].x=1;que[head].y=1;
  23. visit[1][1]=true;
  24. while (head!=tail)
  25. {
  26. int nowx=que[head].x,nowy=que[head].y;
  27. if (magic[nowx][nowy]) a[nowx][nowy]=magic[nowx][nowy];
  28. //如果这个点用过魔法,那么让这个点标记为变的颜色
  29. for (int i=0;i<4;i++)
  30. {
  31. int movex=nowx+wayx[i],movey=nowy+wayy[i],nowc=0;
  32. if (movex<0||movex>m) continue;
  33. if (movey<0||movey>m) continue;
  34. //防止越界
  35. if (a[movex][movey]==1&&a[nowx][nowy]==2) nowc+=1;
  36. if (a[movex][movey]==2&&a[nowx][nowy]==1) nowc+=1;
  37. if (a[movex][movey]==0)
  38. {
  39. if (magic[nowx][nowy]) nowc=cost[movex][movey]-cost[nowx][nowy]+1;
  40. else
  41. {
  42. nowc+=2;
  43. }
  44. }
  45. if (cost[movex][movey]>cost[nowx][nowy]+nowc)//松弛
  46. {
  47. if (!visit[movex][movey])
  48. {
  49. que[tail].x=movex;
  50. que[tail].y=movey;
  51. tail++;
  52. visit[movex][movey]=true;
  53. }
  54. cost[movex][movey]=cost[nowx][nowy]+nowc;
  55. if (nowc==2) magic[movex][movey]=a[nowx][nowy];
  56. }
  57. }
  58. visit[nowx][nowy]=false;
  59. if (magic[nowx][nowy]) a[nowx][nowy]=0;
  60. magic[nowx][nowy]=0;
  61. head++;
  62. }
  63. }
  64. int main()
  65. {
  66. cin>>m>>n;
  67. for (int i=1;i<=n;i++)
  68. {
  69. cin>>x>>y>>c;
  70. a[x][y]=c+1;
  71. }
  72. first();
  73. spfa();
  74. if (cost[m][m]==2147483640) cout<<-1;//即没有路径可以到达终点
  75. else cout<<cost[m][m];
  76. return 0;
  77. }

【NOIP2017】【Luogu P3956】【SPFA】棋盘的更多相关文章

  1. [luogu P1169] [ZJOI2007]棋盘制作

    [luogu P1169] [ZJOI2007]棋盘制作 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的 ...

  2. [luogu]P1169 [ZJOI2007]棋盘制作[DP][单调栈]

    [luogu]P1169 [ZJOI]棋盘制作 ——!x^n+y^n=z^n 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋 ...

  3. 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作

    题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...

  4. 【洛谷p3956】棋盘

    日常blog(✧◡✧) 棋盘[题目链接] 算法: 然后这是2017普及组: first.关于颜色处理:让c[i][j]=color+1:这样无色=0,红色=1,黄色=2: 然后其实是记忆化,将记答案的 ...

  5. Luogu 1169 [ZJOI2007]棋盘制作 - 动态规划+单调栈

    Description 给一个01矩阵, 求出最大的01交错的正方形和最大的01交错的矩阵 Solution 用动态规划求出最大的正方形, 用单调栈求出最大的矩阵. 在这里仅介绍求出最大正方形(求最大 ...

  6. 【Luogu】P1169棋盘制作(单调栈)

    题目链接 唉……这种题放在NOIP以前我是会做的……但是为什么现在反而不会了…… 单调栈.预处理每个点向上能扩展的最大距离,左右用两遍单调栈扫一遍.注意边界. #include<cstdio&g ...

  7. [NOIp2017] luogu P3952 时间复杂度

    跪着看评测很优秀. 题目描述 给你若干个程序,这些程序只有 For 循环,求这些程序的时间复杂度. Solution 大模拟.讲下细节. flag[i]flag[i]flag[i] 表示第 iii 位 ...

  8. luogu 1169 [ZJOI2007]棋盘制作 悬线dp

    悬线法,虽然得不到局部最优解,但是一定能得到全局最优解的算法,十分神奇~ #include <cstdio> #include <algorithm> #define N 20 ...

  9. 【Luogu】P1436 棋盘分割 题解

    嗯,点开题目,哇!是一道闪亮亮的蓝题! 不要被吓到了,其实,这道题就是一个简单的DP啦! 我们设 \(f[x1][y1][x2][y2][c]\) 为以 \((x1,y1)\) 为左上角,以 \((x ...

随机推荐

  1. 设计模式(二十)Flyweight模式

    当使用new关键字生成类的实例时,需要给其分配足够的内存空间.当程序中需要大量对象时,如果都是用new关键字来分配内存,将会消耗大量内存空间.Flyweight模式就是尽量避免new出实例,而是通过尽 ...

  2. 完美解决移动端H5页面的滑动穿透问题

    同事的分享,记录下来. 代码如下: css: body.modal-open { position: fixed; width: 100%; } js: // 兼容低版本 document.scrol ...

  3. 面经-VIVO

    面试时间:2019.09.26 现场面试 面试岗位:广告推荐算法工程师/一面/正式批 面试时长:50Min 面试内容: 自我介绍 阶乘与阶乘和(复杂度高) 文本-视频论文讲解 视频排序讲解 概率题(2 ...

  4. [wcp部署]Linux(Ubuntu)安装部署WCP

    1.安装JAVA运行环境 配置环境变量及安装jdk mkdir /usr/local/java tar -zxvf jdk-8u31-linux-x64.gz #解压jdk包 mv jdk1.8.0_ ...

  5. Hadoop4-HDFS分布式文件系统原理

    一.简介 1.分布式文件系统钢结构 分布式文件系统由计算机集群中的多个节点构成,这些节点分为两类: 主节点(MasterNode)或者名称节点(NameNode) 从节点(Slave Node)或者数 ...

  6. Apache httpd 2.4.27开启GZIP压缩功能

    转载自素文宅博客:https://blog.yoodb.com/yoodb/article/detail/1373 HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的文件压缩算法,现在的应 ...

  7. Ansible之playbook拓展

    一.handlers和notify结合使用触发条件 handlers同tasks是属同级,相当于一个特殊任务列表,这些任务同前文说的tasks里的任务没有本质的不同,用于当关注的资源发生变化时,才会采 ...

  8. maven(1)

    Maven进价:Maven的生命周期阶段 一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等 ...

  9. Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...

  10. element 动态合并表格

    前言 element 官方的例子太简单了,不满足实际的需求 数据肯定是动态的,合并的行数,列数都是动态的,该如何知道每一行的合并数呢 需求 动态合并表格,数据来源于数据库 正文 一开始,我的数据源是单 ...