AcWing175电路维修
这是一道在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电路维修的更多相关文章
- P2243 电路维修
P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...
- 洛谷P2243 电路维修 [最短路]
题目传送门 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...
- CH2601 电路维修(双端队列bfs)建图恶心
CH2601 电路维修 双端队列bfs,其实就是因为只有0和1所以可以直接2维护队列单调性(和优先队列一个道理) 建图的过程需要仔细斟酌(想一想id为什么这么写) 还有,空间要开够(很玄学),我一开始 ...
- 洛谷 P2243 电路维修
P2243 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...
- 「CH2601」 电路维修 解题报告
CH2601 电路维修 描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障 ...
- 2601 电路维修 (双端队列bfs\优先队列bfs(最短路))
描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障,导致无法启动. 电路板 ...
- CH 2601 - 电路维修 - [双端队列BFS]
题目链接:传送门 描述 Ha'nyu是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上.Rika的家里有一辆飞行车.有一天飞行车的电路板突然出现了故障,导致 ...
- AcWing:175. 电路维修(bfs)
达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上. 翰翰的家里有一辆飞行车. 有一天飞行车的电路板突然出现了故障,导致无法启动. 电路板的整体结构是一个R ...
- 电路维修(双端队列 & 最短路)
达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上. 翰翰的家里有一辆飞行车. 有一天飞行车的电路板突然出现了故障,导致无法启动. 电路板的整体结构是一个$ ...
随机推荐
- .py文件打包成.exe文件
# 使用pyinstaller模块 # pip install pyinstaller # 在命令行执行 pyinstaller -F xxx.py
- Fantasy of a Summation (LightOJ - 1213)(快速幂+简单思维)
题解:根据题目给的程序,就是计算给的这个序列,进行k次到n的循环,每个数需要加的次数是k*n^(k-1),所以快速幂取模,算计一下就可以了. #include <bits/stdc++.h> ...
- 卸载brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninst ...
- ettercap局域网DNS切换到恶意网址
ettercap -i eth0 -Tq -M arp:remote -P dns_spoof /// /// Dns欺骗--Ettercap工具进行Dns欺骗 转载至 https://blog.cs ...
- 关于mysql创建数据库,基字符集 和 数据库排序规则 的对比选择
1.一般选择utf8.下面介绍一下utf8与utfmb4的区别. utf8mb4兼容utf8,且比utf8能表示更多的字符.至于什么时候用,看你的做什么项目了,unicode编码区从1 - 126就属 ...
- node版本如何升级
爬坑后的结论:window系统升级node只能到node官网下载window安装包来覆盖之前的node. 以下为我的爬坑之路: 今天安装了vue cli 3,使用命令时报: You are using ...
- vsftpd 配置上传失败553
1查看ftp服务 ftp://ftpuser:123456@10.11.102.58:8023 2 getsebool -a | grep ftp 临时关闭 [root@xuegod63~]# get ...
- ipv4 ipv6 求字符串和整数一一映射的算法 AmazonOrderId
字符串和整数一一映射的算法 公司每人的英文名不同,现在给每个英文名一个不同的数字编号,怎么设计? 走ipv4/6 2/32 2/128就够了,把“网段”概念对应到“表或库”,ip有a_e5类,这概念 ...
- WCF的CommunicationObjectFaultedException异常问题
前天刚刚重装了系统,装上了Win7,结果在调试的时候,WCF服务Open报错了! 具体错误信息如下: System.ServiceModel.CommunicationObjectFaultedExc ...
- python接口自动化框架搭建
一.在搭建接口自动化测试框架前,我觉得先需要想明白以下几点: ① 目前情况下,绝大部分接口协议是http,所以需要对http协议有个基本的了解,如:http协议请求.响应由哪些部分组成,常用的meth ...