首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >w7812三端稳压电路图_w7812三端稳压电路焊接与调试

w7812三端稳压电路图_w7812三端稳压电路焊接与调试

作者头像
全栈程序员站长
发布2022-09-22 15:06:41
发布2022-09-22 15:06:41
9300
举报

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据范围 1≤R,C≤500, 1≤T≤5 输入样例: 1 3 5 \/\ \/// /\\ 输出样例: 1 样例解释 样例的输入对应于题目描述中的情况。

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

题解 边的权值为0或1,可以采用双端队列解决

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
const int N = 5e2 + 10;
int dx[4] = { 
   -1,1,1,-1},dy[4] = { 
   -1,-1,1,1};
char dir[4] = { 
   '\\','/','\\','/'};
char g[N][N];
int vis[N][N],dist[N][N];
typedef pair<int,int>PII;
int xx[4] = { 
   -1,0,0,-1},yy[4] = { 
   -1,-1,0,0};
PII q[N * N];
int hh,tt;
int main(){ 
   
    int T;
    cin>>T;
    int n,m;
    while(T --){ 
   
        cin>>n>>m;
        for(int i = 0;i < n;i ++)
            for(int j = 0;j < m;j ++)
                cin>>g[i][j];
        if((n + m) & 1)cout<<"NO SOLUTION"<<endl;
        else{ 
   
            deque<PII> dp;
            memset(vis,0,sizeof vis);
            memset(dist,0x3f,sizeof dist);
            dist[0][0] = 0;
            dp.push_back({ 
   0,0});
            while(!dp.empty()){ 
   
                PII t = dp.front();
                dp.pop_front();
                if(vis[t.x][t.y])continue;
                vis[t.x][t.y] = true;
                for(int k = 0;k < 4;k ++){ 
   
                    int a = t.x + dx[k],b = t.y + dy[k];
                    if(a < 0 || a > n || b < 0 || b > m)continue;
                    if(g[xx[k] + t.x][yy[k] + t.y] == dir[k]){ 
   
                        dist[a][b] = min(dist[a][b],dist[t.x][t.y]);
                        dp.push_front({ 
   a,b});
                    }
                    else { 
   
                        dist[a][b] = min(dist[a][b],dist[t.x][t.y] + 1);
                        dp.push_back({ 
   a,b});
                    }
                }
            }
            cout<<dist[n][m]<<endl;
        }
        
    }
    return 0;
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168639.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档