这是一道在luogu的蓝题,在yxc大佬的讲解下AC掉了(百般调试)

首先这道题给了一个字符串矩阵,/ \表示相连哪两个节点,只可以走/ \所连接的两个点,但我们可以旋转每一个边,询问从1,1 走到 n+1,m+1的最小旋转次数。如果到不了就输出no。

首先我们要明确点的坐标和对于点四周的格子上边的坐标。其次我们考虑算法,发现这个边权一个是0,一个是1,并且要搜最小步数,我们考虑狄杰斯特拉发现是可行的,所以这也证明了bfs是正确的,然后对于这种问题我们采用stl_deque来写。对于deque,我们对于每一个点进行dijksra式的扩展,假如这个点作为过front,那么打标记,但入队后不需要打标记,和普通的队列不一样,因为这里存在多次进队的可能。然后运用四个方向数组以及一个正确匹配的边进行判断权值是1还是0,松弛dist[tx][ty],假如松弛成功,我们将其入队,边权为0放到front,边权为1放到back。最后就是特判,假如终点的横纵坐标为奇数,肯定到不了。

1.对于格子图和块图要分清楚,方向数组写好,最后答案,越界判断细心写

2.多组数据,千万别return 0了,特判的放在输入后面,还有memset

3.deque: 权0前1后,打当过head的点标记

代码

#include<bits/stdc++.h>
#define maxn 505
using namespace std;
char mp[maxn][maxn];
bool st[maxn][maxn];
int dist[maxn][maxn];
int n,m;
int xx[maxn],yy[maxn];
int T;
/*int dx[4]={-1,1,-1,1};
int dy[4]={-1,-1,1,1};
int ix[4]={-1,-1,0,0};
int iy[4]={-1,0,-1,0};
char cs[]="\\//\\";*/
char cs[] = "\\/\\/";
int dx[] = {-, -, , }, dy[] = {-, , , -};
int ix[] = {-, -, , }, iy[] = {-, , , -};
struct node{
int x,y;
};
int bfs(){
memset(dist,0x3f,sizeof(dist));
memset(st,false,sizeof(st));
dist[][]=;
deque<node>q;
q.push_back({,});
while(q.size()){
node a=q.front();
q.pop_front();
if(st[a.x][a.y]==true) continue;//只可以被当做一次堆顶
st[a.x][a.y]=true;
for(int i=;i<=;i++){
int tx=a.x+dx[i];
int ty=a.y+dy[i];
if(tx<||ty<||tx>n+||ty>m+) continue;
int gx=a.x+ix[i];
int gy=a.y+iy[i];
int w=;
if(mp[gx][gy]!=cs[i]){
w=;
}
int d=w+dist[a.x][a.y];
if(d<dist[tx][ty]){
dist[tx][ty]=d;
if(w==) q.push_back({tx,ty});//权为1,后插
else q.push_front({tx,ty});//权为0,前插
}
}
}
return dist[n+][m+];
}
int main(){
cin>>T;
while(T--){
cin>>n>>m;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
cin>>mp[i][j];
}
}
if((n+m)%!=){
cout<<"NO SOLUTION"<<endl;
continue;
}
cout<<bfs()<<endl;
}
return ;
}

AcWing175电路维修的更多相关文章

  1. P2243 电路维修

    P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

  2. 洛谷P2243 电路维修 [最短路]

    题目传送门 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

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

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

  4. 洛谷 P2243 电路维修

    P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...

  5. 「CH2601」 电路维修 解题报告

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

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

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

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

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

  8. AcWing:175. 电路维修(bfs)

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

  9. 电路维修(双端队列 & 最短路)

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

随机推荐

  1. Java web 公文流转系统 完成结果

    河北金力集团公文流转系统 1.项目需求: 河北金力集团是我省机械加工的龙头企业,主要从事矿山机械制造及各种机械零部件加工.企业有3个厂区,主厂区位于省高新技术开发区,3个分厂分别在保定.邢台和唐山.为 ...

  2. HDU 5793 A Boring Question ——(找规律,快速幂 + 求逆元)

    参考博客:http://www.cnblogs.com/Sunshine-tcf/p/5737627.html. 说实话,官方博客的推导公式看不懂...只能按照别人一样打表找规律了...但是打表以后其 ...

  3. HDU 5818 Joint Stacks ——(栈的操作模拟,优先队列)

    题意:有两个栈A和B,有3种操作:push,pop,merge.前两种都是栈的操作,最后一种表示的是如果“merge A B”,那么把B中的元素全部放到A中,且满足先入后出的栈原则. 分析:显然,我们 ...

  4. NDK OpenGLES3.0 开发(五):FBO 离屏渲染

    什么是 FBOFBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO). FBO 本身不能用于渲染,只有添加了纹理或者 ...

  5. SRS之RTMP连接处理线程conn:接收客户端推流

    由 SRS之RTMP的TCP线程 分析可知,SRS 接受客户端的连接后创建了一个线程:conn,用于处理与客户端的 RTMP 连接. 本文的分析是基于该配置文件的: listen 1935; max_ ...

  6. Tooltip 文字提示

    常用于展示鼠标 hover 时的提示信息. 基础用法 在这里我们提供 9 种不同方向的展示方式,可以通过以下完整示例来理解,选择你要的效果. 使用content属性来决定hover时的提示信息.由pl ...

  7. css中设置table中的td内容自动换行

    word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自动换行. 它们的区别就在于: 1,word-break:break-all 例如div宽 ...

  8. [redis]redis五种数据类型和应用场景

    一.String(字符串)字符串类型是redis最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习尊定基础.字符串类型实际上可 ...

  9. Python安装远程调试Android需要的扩展脚本

    http://android-scripting.googlecode.com/hg/python/ase/android.py 拷贝到/Python27/Lib/site-packages这个目录下 ...

  10. Tomcat服务org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: Java heap space

    一个运行了很久的项目,最近忽然报错:OOM( java.lang.OutOfMemoryError: Java heap space),异常如下 org.springframework.web.uti ...