【NOIP2017】【Luogu P3956】【SPFA】棋盘
本题是一道简单的SPFA
具体看程序
#include<iostream>
#include<cstdio>
using namespace std;
const int wayx[4]={1,0,-1,0},wayy[4]={0,1,0,-1};//4个方向
int n,m,cost[200][200],a[200][200],magic[200][200],x,y,c;
bool visit[200][200];//标志某个点有没有在队列里面
struct data
{
int x,y;
}que[100000];//队列内的点的坐标
void first()
{
for (int i=1;i<=m;i++)
for (int j=1;j<=m;j++)
cost[i][j]=2147483640;
cost[1][1]=0;
//初始化,起点价值为0,其他均为无穷大
}
void spfa()//程序主体 SPFA
{
int head=0,tail=1;
que[head].x=1;que[head].y=1;
visit[1][1]=true;
while (head!=tail)
{
int nowx=que[head].x,nowy=que[head].y;
if (magic[nowx][nowy]) a[nowx][nowy]=magic[nowx][nowy];
//如果这个点用过魔法,那么让这个点标记为变的颜色
for (int i=0;i<4;i++)
{
int movex=nowx+wayx[i],movey=nowy+wayy[i],nowc=0;
if (movex<0||movex>m) continue;
if (movey<0||movey>m) continue;
//防止越界
if (a[movex][movey]==1&&a[nowx][nowy]==2) nowc+=1;
if (a[movex][movey]==2&&a[nowx][nowy]==1) nowc+=1;
if (a[movex][movey]==0)
{
if (magic[nowx][nowy]) nowc=cost[movex][movey]-cost[nowx][nowy]+1;
else
{
nowc+=2;
}
}
if (cost[movex][movey]>cost[nowx][nowy]+nowc)//松弛
{
if (!visit[movex][movey])
{
que[tail].x=movex;
que[tail].y=movey;
tail++;
visit[movex][movey]=true;
}
cost[movex][movey]=cost[nowx][nowy]+nowc;
if (nowc==2) magic[movex][movey]=a[nowx][nowy];
}
}
visit[nowx][nowy]=false;
if (magic[nowx][nowy]) a[nowx][nowy]=0;
magic[nowx][nowy]=0;
head++;
}
}
int main()
{
cin>>m>>n;
for (int i=1;i<=n;i++)
{
cin>>x>>y>>c;
a[x][y]=c+1;
}
first();
spfa();
if (cost[m][m]==2147483640) cout<<-1;//即没有路径可以到达终点
else cout<<cost[m][m];
return 0;
}
【NOIP2017】【Luogu P3956】【SPFA】棋盘的更多相关文章
- [luogu P1169] [ZJOI2007]棋盘制作
[luogu P1169] [ZJOI2007]棋盘制作 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的 ...
- [luogu]P1169 [ZJOI2007]棋盘制作[DP][单调栈]
[luogu]P1169 [ZJOI]棋盘制作 ——!x^n+y^n=z^n 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋 ...
- 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作
题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...
- 【洛谷p3956】棋盘
日常blog(✧◡✧) 棋盘[题目链接] 算法: 然后这是2017普及组: first.关于颜色处理:让c[i][j]=color+1:这样无色=0,红色=1,黄色=2: 然后其实是记忆化,将记答案的 ...
- Luogu 1169 [ZJOI2007]棋盘制作 - 动态规划+单调栈
Description 给一个01矩阵, 求出最大的01交错的正方形和最大的01交错的矩阵 Solution 用动态规划求出最大的正方形, 用单调栈求出最大的矩阵. 在这里仅介绍求出最大正方形(求最大 ...
- 【Luogu】P1169棋盘制作(单调栈)
题目链接 唉……这种题放在NOIP以前我是会做的……但是为什么现在反而不会了…… 单调栈.预处理每个点向上能扩展的最大距离,左右用两遍单调栈扫一遍.注意边界. #include<cstdio&g ...
- [NOIp2017] luogu P3952 时间复杂度
跪着看评测很优秀. 题目描述 给你若干个程序,这些程序只有 For 循环,求这些程序的时间复杂度. Solution 大模拟.讲下细节. flag[i]flag[i]flag[i] 表示第 iii 位 ...
- luogu 1169 [ZJOI2007]棋盘制作 悬线dp
悬线法,虽然得不到局部最优解,但是一定能得到全局最优解的算法,十分神奇~ #include <cstdio> #include <algorithm> #define N 20 ...
- 【Luogu】P1436 棋盘分割 题解
嗯,点开题目,哇!是一道闪亮亮的蓝题! 不要被吓到了,其实,这道题就是一个简单的DP啦! 我们设 \(f[x1][y1][x2][y2][c]\) 为以 \((x1,y1)\) 为左上角,以 \((x ...
随机推荐
- Mybatis常见配置错误总结
Mybatis常见配置错误总结 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionF ...
- 2018.8.20 Python之路---常用模块
一.re模块 查找: re.findall(‘正则表达式’,‘字符串’) 匹配所有符合正则表达式的内容,形成一个列表,每一项都是列表中的一个元素. ret = re.findall('\d+','sj ...
- Magicodes.IE已支持导出Word、Pdf和Html
关于Magicodes.IE 导入导出通用库,通过导入导出DTO模型来控制导入和导出,支持Excel.Word.Pdf和Html. GitHub地址:https://github.com/xin-la ...
- 二:Mysql库相关操作
1:系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等.performance_schema: My ...
- Knative Serving 健康检查机制分析
作者| 阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...
- 在虚拟机上的关于Apache(阿帕奇)(3)基于IP访问网站
这篇随笔是基于IP访问网站,和后面两篇文章基于域名和基于端口一起练习效果更好 基于IP(记得下载httpd服务) 首先使用nmtui命令为网卡添加多个ip地址 输入命令:nmtui 进入下面这个界 ...
- 监控tomcat,自动启动
tomcatID=`ps -ef |grep tomcat |grep -v 'grep'|awk '{print $2}'` tomcatCount=`ps -ef|grep tomcat |gr ...
- 死磕 java线程系列之终篇
(手机横屏看源码更方便) 简介 线程系列我们基本就学完了,这一个系列我们基本都是围绕着线程池在讲,其实关于线程还有很多东西可以讲,后面有机会我们再补充进来.当然,如果你有什么好的想法,也可以公从号右下 ...
- docker compose网络设置
(系统:Centos 7.4 ,docker 版本:18.03.1-ce, docker-compose version 1.18.0) cat docker-compose.yml version: ...
- python机器学习——自适应线性神经元
上篇博客我们说了感知器,这篇博客主要记录自适应线性神经元的实现算法及一些其他的训练细节,自适应线性神经元(简称为Adaline)由Bernard Widrow和他的博士生Tedd Hoff提出,对感知 ...