P4554 小明的游戏
SPFA板子题
#include <stdio.h>
#include <string.h>
#define Clean(X,K) memset(X,K,sizeof(X))
#define re register
#define GC getchar()
#define Jud(X,Y) (X<0||X>=N||Y<0||Y>=M)
int Qread () {
int X = 0 ; char C = GC ;
while (C > '9' || C < '0') C = GC ;
while (C >='0' && C <='9') {
X = X * 10 + C - '0' ;
C = GC ;
}
return X ;
}
const int Maxn = 505 ,INF = 20021020 << 2 , U = 500 * 500 + 5;
int N , M , Mdis[Maxn][Maxn] , Vis[Maxn][Maxn] , Qx[Maxn * Maxn] , Qy[Maxn * Maxn] , Head , Tail ;
const short int Dx[] = {-1,1,0,0} , Dy[] = {0,0,-1,1} ;
char A[Maxn][Maxn] ;
int SPFA (int Sx , int Sy , int Ex , int Ey) {
Clean (Mdis , 0x3f) , Clean(Vis , 0) , Head = Tail = 1 ;
Mdis[Sx][Sy] = 0 , Vis[Sx][Sy] = 1 ;
if (++ Tail > U) Tail = 0 ;
Qx[Tail] = Sx , Qy[Tail] = Sy ;
while (Head != Tail) {
if (++ Head > U) Head = 0 ;
int Nx = Qx[Head] , Ny = Qy[Head] ;
Vis[Nx][Ny] = 0 ;
for (re int i = 0 ; i < 4 ; ++ i) {
int Tx = Nx + Dx[i] , Ty = Ny + Dy[i] ;
if (Jud(Tx , Ty)) continue ;
int Dis = Mdis[Nx][Ny] + (A[Tx][Ty] == A[Nx][Ny] ? 0 : 1) ;
if (Dis < Mdis[Tx][Ty]) {
Mdis[Tx][Ty] = Dis ;
if (!Vis[Tx][Ty]) {
Vis[Tx][Ty] = 1 ;
if (++ Tail > U) Tail = 0 ;
Qx[Tail] = Tx , Qy[Tail] = Ty ;
}
}
}
}
return Mdis[Ex][Ey] ;
}
int main () {
// freopen ("P4554.in" , "r" , stdin) ;
N = Qread () , M = Qread () ;
while (N + M) {
for (re int i = 0 ; i < N; ++ i) for (re int j = 0 ; j < M; ++ j) {
char C = GC ;
while (C != '#' && C != '@') C = GC ;
A[i][j] = C ;
}
int Sx = Qread () , Sy = Qread () , Ex = Qread () , Ey = Qread ();
printf ("%d\n" , SPFA (Sx , Sy , Ex , Ey)) ;
N = Qread () , M = Qread () ;
}
fclose (stdin) , fclose (stdout) ;
return 0 ;
}
P4554 小明的游戏的更多相关文章
- P4554 小明的游戏 (洛谷) 双端队列BFS
最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩 ...
- BZOJ2464: 中山市选[2009]小明的游戏
2464: 中山市选[2009]小明的游戏 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 280 Solved: 124[Submit][Statu ...
- 最短路【bzoj2464】: 中山市选[2009]小明的游戏
2464: 中山市选[2009]小明的游戏 Description 小明最近喜欢玩一个游戏.给定一个n * m的棋盘,上面有两种格子#和@.游戏的规则很简单:给定一个起始位置和一个目标位置,小明每一步 ...
- bzoj2464: 中山市选[2009]小明的游戏(最短路)
2464: 中山市选[2009]小明的游戏 题目:传送门 题解: 最短路的裸题... 代码: #include<cstdio> #include<cstring> #inclu ...
- bzoj2464 小明的游戏
Description 小明最近喜欢玩一个游戏.给定一个n * m的棋盘,上面有两种格子#和@.游戏的规则很简单:给定一个起始位置和一个目标位置,小明每一步能向上,下,左,右四个方向移动一格.如果移动 ...
- AC日记——中山市选[2009]小明的游戏 bzoj 2464
2464 思路: 最短路: 代码: #include <cstdio> #include <cstring> #include <iostream> #includ ...
- 【bzoj2464】中山市选[2009]小明的游戏
直接转换成最短路 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstr ...
- [小明打联盟][斜率/单调队列 优化dp][背包]
链接:https://ac.nowcoder.com/acm/problem/14553来源:牛客网 题目描述 小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时 ...
- HDU 4828 小明系列故事——捉迷藏
漂亮妹子点击就送:http://acm.hdu.edu.cn/showproblem.php?pid=4528 Time Limit: 500/200 MS (Java/Others) Memo ...
随机推荐
- C++STL模板库序列容器之deque
目录 一丶队列容器deque简介 二丶使用代码演示 一丶队列容器deque简介 deque底层跟vector一样,都是数组维护.不同的是可以操作头部. 二丶使用代码演示 #define _CRT_SE ...
- 菜鸟系列docker——docker基本概念(1)
docker基本概念 1.准备 这里先介绍容器技术,后续再介绍docker.docker是容器的一种,除docker以外,还存在coreos.不过在当前趋势下容器和docker基本上可以划为等号了. ...
- jmeter 分布式压测(Linux)
之前一篇博文写的是如何在Linux上使用jmeter压测,这篇介绍下Linux上jmeter的分布式压测. 和windows上的分布式类似,需要配置agent节点和控制机 一.Agent节点配置 1. ...
- JVM(三)对象的生死判定和算法详解
好的文章是能把各个知识点,通过逻辑关系串连起来,让人豁然开朗的同时又记忆深刻. 导读:对象除了生死之外,还有其他状态吗?对象真正的死亡,难道只经历一次简单的判定?如何在垂死的边缘"拯救&qu ...
- Perl IO:简介和常用IO模块
三篇Perl IO基础类文章: Perl的IO操作(1):文件句柄 Perl的IO操作(2):更多文件句柄的模式 Perl文件句柄相关的常见变量 IO对象和IO::Module家族模块 无论是哪种高级 ...
- Runloop详解
RunLoop是iOS和OSX开发中非常基础的一个概念,这篇文章将从源码以及应用入手,介绍RunLoop的概念以及底层实现原理.本人看了一下RunLoop的英语源码,以及借鉴部分优秀博客,感谢!读完这 ...
- 杭电ACM2005--第几天?
第几天? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- Java开发笔记(六十七)清单:ArrayList和LinkedList
前面介绍了集合与映射两类容器,它们的共同特点是每个元素都是唯一的,并且采用二叉树方式的类型还自带有序性.然而这两个特点也存在弊端:其一,为啥内部元素必须是唯一的呢?像手机店卖出了两部Mate20,虽然 ...
- C#面试分享:单例模式
C#面试分享:单例模式 提问1:请给出单例模式的实现: 答: public class Animal { private static Animal _instance = null; private ...
- 前端入门11-JavaScript语法之数组
声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...