当转移的代价是0和一个分明不同的权值时,可以用双端队列BFS去跑(你跑最短路也没问题。。QWQ)


而对于这道题,边旋转代价是1,不旋转代价是0;可以直接建图最短路,也可以跑BFS

这个题建图很有意思:如果是' \ '就在mp上记录:1,反之 ' / '在上面记录为0

至于如何用:如果一个点在左上,一个点在右下,那么把mp取个非就是代价,即 \ 在mp中为1,我们用时要把它变成0,而  /  在mp中为0,用的时候变成1

      如果一个点在右上,一个点在左下,那么代价就是mp的值

剩下就直接BFS就好了。。注意方向的常量数组,别写错,是向四个角扩展,而不是上下左右QWQ写到最后才发现。。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#define P pair<int,int>
#define PP pair<pair<int,int>,pair<int,int> >
#define mkp make_pair
#define R register int
const int dx[]={-,,-,},dy[]={,-,-,};
using namespace std;
const int M=;
int t,r,c; int d[M][M];
bool vis[M][M],mp[M][M];
char s[M];
deque<PP > q;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
inline bool ckpos(int x,int y) {return x<||y<||x>r+||y>c+; }
inline int w(int x,int xx,int y,int yy) {
if((xx<x&&yy<y)||(xx>x&&yy>y)) return !mp[min(x,xx)][min(y,yy)];
else return mp[min(x,xx)][min(y,yy)];
}
inline void bfs() {
mp[][]=; P u=mkp(,),v=mkp(,);
q.push_back(mkp(u,v)); d[][]=;
while(q.size()) {
PP t=q.front(); q.pop_front();
P u=t.first; P v=t.second; R xx=u.first,yy=u.second,x=v.first,y=v.second;
if(vis[x][y]) continue; vis[x][y]=true; d[x][y]=d[xx][yy]+w(x,xx,y,yy);
for(R i=;i<;++i) {
R vx=x+dx[i],vy=y+dy[i];
P s=mkp(vx,vy); if(ckpos(vx,vy)||vis[vx][vy]) continue;
if(w(vx,x,vy,y)) q.push_back(mkp(v,s)); else q.push_front(mkp(v,s));
}
}
}
signed main() {
t=g();
while(t--) {
memset(d,,sizeof(d)),memset(vis,,sizeof(vis));
r=g(),c=g();
for(R i=;i<=r;++i) {
scanf("%s",s+);
for(R j=;j<=c;++j) if(s[j]=='\\') mp[i][j]=;
else mp[i][j]=;
} bfs();
if(vis[r+][c+]) printf("%d\n",d[r+][c+]);
else printf("NO SOLUTION\n");
}
}

2019.04.26

Luogu P2243 电路维修 双端队列BFS的更多相关文章

  1. CH 2601 - 电路维修 - [双端队列BFS]

    题目链接:传送门 描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障,导致 ...

  2. CH2601 电路维修(双端队列bfs)建图恶心

    CH2601 电路维修 双端队列bfs,其实就是因为只有0和1所以可以直接2维护队列单调性(和优先队列一个道理) 建图的过程需要仔细斟酌(想一想id为什么这么写) 还有,空间要开够(很玄学),我一开始 ...

  3. 电路维修 (广搜变形-双端队列bfs)

    # 2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On [题目描述] 有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会 ...

  4. codeforces 1064D 双端队列BFS

    双端队列BFS解决的就是路径权值可能为0的图最短路问题,权值为0插入队头,否则插入队尾. 对于这个题,可以看作上下移动的路径的权值为0,左右移动权值为1,而且不能超过规定的步数. 直接广搜求覆盖的点的 ...

  5. 2601 电路维修 (双端队列bfs\优先队列bfs(最短路))

    描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障,导致无法启动. 电路板 ...

  6. POJ 3662 Telephone Lines【二分答案+最短路】||【双端队列BFS】

    <题目链接> 题目大意: 在一个节点标号为1~n的无向图中,求出一条1~n的路径,使得路径上的第K+1条边的边权最小. 解题分析:直接考虑情况比较多,所以我们采用二分答案,先二分枚举第K+ ...

  7. HDU - 6386 Age of Moyu (双端队列+bfs)

    题目链接 双端队列跑边,颜色相同的边之间的花费为0,放进队首:不同的花费为1,放进队尾. 用Dijkstra+常数优化也能过 #include<bits/stdc++.h> using n ...

  8. P4554 小明的游戏 (洛谷) 双端队列BFS

    最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩 ...

  9. Codeforces 1064D Labyrinth(双端队列BFS)

    题意: 给一个图,"*"不可以走,给你一个起点,限制向左走L次,向右走R次,上下不限制,问你最多可以走到多少个格子 思路: BFS,每次将上下走的策略加入队首,左右加入队尾,(相当 ...

随机推荐

  1. swfupload上传文件数量限制之setStats()

    使用swfupload仿赶集的图片上传 SWFUpload是一个基于flash与javascript的客户端文件上传组件. handlers.js文件 完成文件入列队(fileQueued) → 完成 ...

  2. JS获得css样式即获得元素的计算样式(《Javascript精粹修订版》书摘)

    为HTML文档中的元素指定样式可以有3种方法:使用内嵌样式.在页面的head中对Style进行声明以及外部 CSS 文件.元素的视觉效果往往是由上述3种方式的结合或者其中某一种方式来确定的,但是内嵌样 ...

  3. R 如何 隐藏坐标轴

    x = c(7,5,8)dim(x)<-3names(x)<-c("apple","banana", "cherry")plot ...

  4. hdu 4286 (list的reverse时间复杂度为n)

    list 的翻转reverse源码: // 将链表倒置 // 其算法核心是历遍链表, 每次取出一个结点, 并插入到链表起始点 // 历遍完成后链表满足倒置 template <class T, ...

  5. LeetCode(258.各位相加)的思路及解决过程

    问题如下: 给一个非负整数 num,反复添加所有的数字,直到结果只有一个数字. 例如: 设定 num = 38,过程就像: 3 + 8 = 11, 1 + 1 = 2. 由于 2 只有1个数字,所以返 ...

  6. wc.exe指令(C++)

    https://github.com/kielingpao/wc 项目相关要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有wc.ex ...

  7. JAVA的String 类【转】

    String类 1.String对象的初始化 由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下: String s = “abc”; s ...

  8. C# 真正完美的 汉字转拼音

    网上有很多说自己整理的汉字转拼音是完美的,但使用后才发现都是半吊的瓶子,问题多多. 常见的生僻字,或多音字识别,转换后简直让人感觉可怕. 主流的转换有三种:hash匹配,Npinyin,微软PinYi ...

  9. SharePoint 2013报错之“指定的文件不是有效的电子表格或者没有包含要导入的数据”

    当你尝试用SharePoint 2013中的“导入电子表格”功能时,可能会遇到报错“指定的文件不是有效的电子表格或者没有包含要导入的数据” 解决方法:只需要将你的SharePoint网址添加到浏览器的 ...

  10. C#构造函数详解和析构函数详解

    首先来了解下构造函数的定义: C#构造函数是一种特殊的成员函数,它的作用主要用于为对象分配存储空间,对数据成员进行初始化. 接下来看一下他的语法定义形式: |访问修饰符| 标识符 (|参数列表|) | ...