当转移的代价是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. 2014蓝桥杯B组初赛试题《啤酒和饮料》

    题目描述: 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元.     我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒.     注意:答案是一个整数.请通过 ...

  2. 网页开发中调用iframe中的函数或者是dom元素

    iframe中的代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  3. 434. Number of Segments in a String 字符串中的单词个数

    [抄题]: Count the number of segments in a string, where a segment is defined to be a contiguous sequen ...

  4. SQL 左联接去除左边重复的数据

    代码如下: use DB go select table1.*,b.OPTime from [dbo].[table1] left join( select * from (select table2 ...

  5. C#中对DataTable进行全连接后group by,orderby

    var result = from temp2 in                             (                                 from u in u ...

  6. css总结12:CSS Float(浮动)

    1 定义:CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列. 2 解释:浮动的元素,浮在界面上,脱离了HTML文本流. 元素的水平方向浮动,意味着元素只能左右移动而不能 ...

  7. Linux下的strerror是否线程安全?

    下列是glibc-2.14中的源代码: 点击(此处)折叠或打开 char * strerror (errnum) int errnum; { char *ret = __strerror_r (err ...

  8. 门面(Facade)模式

    门面(Facade)模式  也叫 外观模式. 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更加容易使用 /* * 门面(Facade)角色:客户端可以 ...

  9. [转] SAAS, PAAS, IAAS

    SaaS:软件即服务.如CRM.HRM.SCM等等,是可以直接使用的,所以是和多数用户接触最多的一个层面,典型的比如CRM类软件SalesForce. PaaS:平台即服务.如数据挖掘.系统管理.编程 ...

  10. DOM--sql server

    public List<LianHeData> select(int ID) { List<LianHeData> list = new List<LianHeData& ...