电路维修(双端队列广搜)

达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上。

翰翰的家里有一辆飞行车。

有一天飞行车的电路板突然出现了故障,导致无法启动。

电路板的整体结构是一个 R 行 C 列的网格(R,C≤500),如下图所示。

电路.png

每个格点都是电线的接点,每个格子都包含一个电子元件。

电子元件的主要部分是一个可旋转的、连接一条对角线上的两个接点的短电缆。

在旋转之后,它就可以连接另一条对角线的两个接点。

电路板左上角的接点接入直流电源,右下角的接点接入飞行车的发动装置。

达达发现因为某些元件的方向不小心发生了改变,电路板可能处于断路的状态。

她准备通过计算,旋转最少数量的元件,使电源与发动装置通过若干条短缆相连。

不过,电路的规模实在是太大了,达达并不擅长编程,希望你能够帮她解决这个问题。

注意:只能走斜向的线段,水平和竖直线段不能走。

输入格式:

输入文件包含多组测试数据。

第一行包含一个整数 T,表示测试数据的数目。

对于每组测试数据,第一行包含正整数 R和 C,表示电路板的行数和列数。

之后 R行,每行 C 个字符,字符是"/""\"中的一个,表示标准件的方向。

输出格式:

对于每组测试数据,在单独的一行输出一个正整数,表示所需的最小旋转次数。

如果无论怎样都不能使得电源和发动机之间连通,输出 NO SOLUTION

数据范围:

1≤R,C≤500,
1≤T≤5

输入样例:

1
3 5
\\/\\
\\///
/\\\\

输出样例: 

1

样例解释: 

样例的输入对应于题目描述中的情况。

只需要按照下面的方式旋转标准件,就可以使得电源和发动机之间连通。

电路2.png

关于ixiy和dxdy——格点偏移和坐标点偏移 

寻找最短路是从一条斜线的源点出发,一条斜线会有两个坐标点,一个坐标点有四个偏移方向

例如从坐标点(1,1)可以到到(0,2),(0,0),(2,0),(2,2),那么便可以很容易地写出坐标点的方向数组了,同时我们需要考虑坐标点在偏移的时候其跨越的格子中的斜线是否能连通,所以我们需要数组string cs来存储坐标点四个方向的路线形状,例如int dian_ne[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};那么对应的cs="\\//\\"(注意‘\\'为转义字符,左上 \ ,右上 / ,左下 / ,右下 \  ),格点坐标是坐标点所跨越的格子的位置,那么格点的方向数组也要与坐标点的方向数组对应,int ge_ne[4][2]={{-1,-1},{-1,0},{0,-1},{0,0}};

然后我们需要判断格点位置的斜线是否与cs对应的斜线是否相同,若不同则说明需要旋转才能连通,此时“边权”为1,如果连通则“边权为0。

根据Dijkstra算法的思想求最短步数,应将每次步数少的优先出队,本题也借用此思想来做,若边权为1,则放入双端队列的队尾,否则放入队头。

(注意:cs 、ge_ne,dian_ne三者必须按照统一的方向构造)

代码: 

 

#include<iostream>
#include<deque>
#include<cstring>
#include<algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N=505;
int gne[4][2]={{-1,-1},{-1,0},{0,-1},{0,0}};
int dne[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};
char a[N][N];
int dist[N][N];
int h,l;
bool st[N][N];
void bfs()
{
    memset(st,false,sizeof st);
    deque<PII> q;
    q.push_front({0,0});
    memset(dist,0x3f,sizeof dist);
    dist[0][0]=0;
    string cs="\\//\\";
    while(q.size())
    {
        auto it=q.front();q.pop_front();
        int x=it.first,y=it.second;
        if(x==h&&y==l)
        {
            cout<<dist[x][y];
            return ;
        }
        if(st[x][y]) continue;
        st[x][y]=true;
        for(int i=0;i<=3;i++)
        {
            int tx=x+dne[i][0],ty=y+dne[i][1];
            if(tx>=0&&tx<=h&&ty>=0&&ty<=l)
            {
                int ga=x+gne[i][0],gb=y+gne[i][1];
                int w=a[ga][gb]==cs[i]?0:1;
                if(dist[tx][ty]>dist[x][y]+w)
                {
                    dist[tx][ty]=dist[x][y]+w;
                    if(w) q.push_back({tx,ty});
                    else q.push_front({tx,ty});
                }
            }
        }
    }
    cout<<"NO SOLUTION";
    return ;
}
int main()
{
    int t;cin>>t;
    while(t--)
    {
        cin>>h>>l;
        memset(a,'\0',sizeof a);
        for(int i=0;i<h;i++)
        for(int j=0;j<l;j++)
        cin>>a[i][j];
        bfs();
        puts("");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/453367.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS 背景

CSS 背景 背景颜色 背景颜色若不设置&#xff0c;默认为透明(transparent) background-color: 颜色;背景颜色半透明 background: rgba(0, 0, 0, 0.3)前三个参数设定颜色&#xff0c;最后一个参数&#xff08;例如上述例子中的0.3&#xff09;设定透明度。0&#xff5e;1: 0…

[npm]覆盖依赖中内嵌的依赖的版本

背景&#xff1a; 开发过程中&#xff0c;我的项目中需要使用type/node这个依赖&#xff0c;如下图&#xff1a; type/node中又依赖了一个undici-types的包&#xff0c;如下图&#xff1a; 现在想要升级undici-types的版本&#xff0c;由于type/node官网暂时并没有使用最新版本…

机器学习——过拟合问题、正则化解决法

过拟合的基本概念 欠拟合&#xff1a;假设函数没有很好的拟合训练集数据&#xff0c;也称这个假设函数有高偏差&#xff1b; 过拟合&#xff1a;过拟合也称为高方差。在假设函数中添加高阶多项式&#xff0c;让假设函数几乎能完美的拟合每个样本数据点&#xff0c;这看起来很…

JSONObject在Android Main方法中无法实例化问题

目录 前言一、Main(非安卓环境)方法下运行二、安卓坏境下运行三、why? 前言 原生的json,即org.json.JSONObject; 在Android Studio中的Main方法里运行报错&#xff0c;但在安卓程序运行过程正常 一、Main(非安卓环境)方法下运行 static void test() {try {// 创建一个 JSON …

idea远程服务器debug

前提 本地代码和服务器代码一致 idea中创建远程服务 一般只需要修改ip&#xff0c;注意这边的端口是监听Socket的端口&#xff0c;不是服务的端口 然后把运行参数复制一下 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 tomcat启动 在tomcat的lib下的c…

爬虫案例2:playwright 超爽体验

参考链接&#xff1a;https://playwright.bootcss.com/python/docs/intro 目标网站&#xff1a;https://spa6.scrape.center/通过观察&#xff0c;页面的信息是通过Ajax请求后返回的信息 下面使用playwright实现绕过token的获取直接拿到返回的数据import asyncio import json f…

【相关问题解答2】bert中文文本摘要代码:结果输出为一些重复的标点符号和数字

【相关问题解答2】bert中文文本摘要代码 写在最前面问题1&#xff1a;tokenizer.py中encode函数&#xff0c;不能使用lower操作关于提问问题描述1一些建议1问题更新2&#xff1a;结果输出为一些重复的标点符号和数字一些建议21. 数据检查和预处理2. 模型和训练配置3. 过拟合和欠…

罐头鱼AI短视频矩阵获客|AI视频批量生成

罐头鱼AI传单功能操作说明&#xff0c;智能化提升您的视频营销效率&#xff01; 在这个信息爆炸的时代&#xff0c;短视频已成为企业营销的重要方式之一。而为了更高效地进行视频营销&#xff0c;罐头鱼AI传单功能应运而生&#xff0c;为您提供全方位的视频管理和发布服务。 首…

华为车控面试前后

个人经历&#xff1a; 秋招未接受其他公司offer&#xff0c;all in华子。 ->秋招失败0 offer 年前被车bu捞后入池开始审批。 ->等待超过1个月&#xff0c;陷入煎熬。 ->终于等到意向书。 分享时间线&#xff1a; 10月 笔试和3面入池2012 1月 收到车bu捞人电话解…

【OpenGL手册13】 光照贴图

目录 一、说明二、漫反射贴图三、镜面光贴图四、采样镜面光贴图练习 一、说明 在上一节中&#xff0c;我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观&#xff0c;但是这仍不能对一个…

10、设计模式之外观模式(Facade)

一、什么是外观模式 这个大家一定是经常使用的&#xff0c;外观模式&#xff08;门面模式&#xff09;是一种结构型设计模式。它提供一个统一的接口&#xff0c;用于访问子系统中的一组接口&#xff0c;隐藏了系统的复杂性。最简单的应用就是&#xff0c;当controller层的逻辑处…

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript 不同版本4.8-4.28(最新版)离线部署

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript 不同版本4.8-4.28&#xff08;最新版&#xff09;SDK离线部署 测试资源4.18 以及之前版本4.19 以及之后版本 接触一段时间 ArcGIS JSAPI 之后&#xff0c;整体感觉还好&#xff0c;后来需要解决不同版本问题&#xff0…

php apache 后台超时设置

最近在写一个thinkphp项目的时候&#xff0c;发现Ajax从后端请求数据时间比较长&#xff0c;大概需要45秒左右&#xff0c;但是一旦请求时间超过40s&#xff0c;页面就会超时500了&#xff0c;一开始以为是ajax请求时间不能太长&#xff0c;后来将Ajax请求改为同步且timeout设置…

休闲食品类目电商数据分析

食品的受众群里非常高&#xff0c;所以各品牌竞争也非常大&#xff0c;休闲食品作为人们闲余品味之物&#xff0c;也包揽了各大电商平台的主要流量&#xff0c;随着经济水平的提升&#xff0c;休闲食品类目的销售也随之不断增加&#xff0c;下面我们结合一些数据&#xff0c;去…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的商品识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要&#xff1a;在零售行业的技术进步中&#xff0c;开发商品识别系统扮演着关键角色。本博文详细阐述了如何利用深度学习技术搭建一个高效的商品识别系统&#xff0c;并分享了一套完整的代码实现。系统采用了性能强劲的YOLOv8算法&#xff0c;同时对YOLOv7、YOLOv6、YOLOv5等…

web项目抢购模块测试

web项目抢购模块测试 抢购模块(先测后台,再测前台)流程抢购用例编写测试点--后台抢购用例编写测试点--前台用例设计 面试题1: 当你发现研发实现的结果与需求不一致时怎么办? 需求评审的时候:需要确认所有输入类型的校验是针对单独的输入框做的还是在最终提交时校验 抢购模块 需…

深入挖掘C语言之——联合

目录 联合的定义 联合的特点 联合的应用场景 在C语言中&#xff0c;联合&#xff08;Union&#xff09;是一种特殊的数据结构&#xff0c;它允许在同一内存地址存储不同类型的数据。与结构体&#xff08;Struct&#xff09;不同的是&#xff0c;联合中的所有成员共享同一块内…

算法(结合算法图解)

算法简介简单查找二分查找法 选择排序内存的工作原理数组和链表数组选择排序小结 递归小梗 要想学会递归&#xff0c;首先要学会递归。 递归的基线条件和递归条件递归和栈小结 快速排序分而治之快速排序合并排序时间复杂度的平均情况和最糟情况小结 散列表散列函数缓冲小结性能…

科研三维模型高精度三维扫描服务3d逆向测绘建模工业产品抄数设计

三维抄数技术在科研三维模型的应用已经日益广泛&#xff0c;其高精度、高效率的特点使得科研工作者能够更快速、更准确地获取和分析数据。这一技术的核心在于通过专业的三维扫描仪对实物进行高精度测量&#xff0c;再将这些数据转化为三维数字模型&#xff0c;为后续的研究提供…