问题 A: 电路维修
问题 A: 电路维修
时间限制: 1 Sec 内存限制: 128 MB
提交: 16 解决: 7
[提交][状态][讨论版][命题人:add_shengjunjie][Edit] [TestData]
题目链接:http://acm.ocrosoft.com/problem.php?cid=1694&pid=0
题目描述
Ha’nyu是来自异世界的魔女,她在漫无目的的四处漂流的时候,遇到了善良的少女Rika,从而被收留在地球上。Rika家里有一辆飞行车。有一天飞行车的电路板突然出现了故障,导致无法正常启动。
电路板的整体结构是一个R行C列的网格,如图所示。每一个格点都是电线的接点。每个格子都包含一个电子元件。电子元件的主要部分是一个可旋转的,连接一条对角线上的两个连接点的短电缆。在旋转之后,它就可以连接另一条对角线的两个接点。电路板左上角的接点接入直流电源,右下角的接点接入飞行车的发动装置。
Ha‘nyu发现因为某些元件的方向不小心发生了改变,电路板可能处于断路状态。她准备通过计算,旋转最少数量的元件,使电源与发动装置通过若干条短电缆相连。不过电路的规模实在太大了,Ha‘nyu不擅长编程,希望你能够帮她解决这个问题。
输入
输入文件包含多组测试数据。第一行包含一个整数T 表示测试数据的数目。
对于每组测试数据,第一行包含正整数 R 和C,表示电路板的行数和列数。
之后 R 行,每行C 个字符,字符是"/"和"\"中的一个,表示标准件的方向。
对于 100% 的数据,R,C≤500,T≤5。
输出
对于每组测试数据,在单独的一行输出一个正整数,表示所需的缩小旋转次数。
如果无论怎样都不能使得电源和发动机之间连通,输出 NO SOLUTION。
样例输入
1
3 5
\\/\\
\\///
/\\\\
样例输出
1
思路:二维数组不好建地图,所以用邻接表去建图,化二维地图用一维去存,利用权值为0的不可叠加性,用双端队列去BFS。
代码:
#include<bits/stdc++.h>using namespace std;#define maxn 1000#define INF 0x3f3f3f3fint n, m;char tt[maxn][maxn];//存地图int dis[maxn*maxn];int ans = INF;struct edge{int e, w;//终点和路程edge(int _e, int _w)//构造函数初始化{e = _e;w = _w;}};vector<edge>Map[maxn*maxn];//建邻接表void add_edge(int x, int y, int z){Map[x].push_back(edge(y, z));}int bfs(int s, int t){for (int i = 0; i < maxn*maxn; i++)dis[i] = INF;//双端队列BFSdeque<int>p;p.push_back(s);dis[s] = 0;while (!p.empty()){int Now = p.back();p.pop_back();if (Now == t) return dis[Now];for (int i = Map[Now].size() - 1; i >= 0; i--){int u = Map[Now][i].e, c = Map[Now][i].w;if (dis[u] > dis[Now] + c){dis[u] = dis[Now] + c;if (c == 0)p.push_back(u);//若边权为0放在后面elsep.push_front(u);//若边权为1放在前面}}}return dis[t];}int main(){int T;cin >> T;while (T--){ans = INF;for (int i = 0; i <= maxn * maxn; i++)Map[i].clear();//邻接表清空cin >> n >> m;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> tt[i][j];}}//zuofor (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){add_edge((i - 1)*(m + 1) + j, i*(m + 1) + j - 1, tt[i][j] != '/');//将二维图转化为一维图add_edge(i*(m + 1) + j - 1, (i - 1)*(m + 1) + j, tt[i][j] != '/');add_edge((i - 1)*(m + 1) + j - 1, i*(m + 1) + j, tt[i][j] == '/');add_edge(i*(m + 1) + j, (i - 1)*(m + 1) + j - 1, tt[i][j] == '/');}}ans = bfs(0, n*(m + 1) + m);if (ans == INF)cout << "NO SOLUTION" << endl;else cout << ans << endl;}}
问题 A: 电路维修相关推荐
- 电路维修知识-可控硅
电路维修记录 一.可控硅基础知识 二.维修检测 一.可控硅基础知识 可控硅又叫晶闸管,是一种常用的半导体器件,是一种能像闸门一样控制电流的大小元器件.因此,可控硅也具有开关控制电压调整和整流等功能. ...
- 电路维修知识-电阻器
电路维修知识-电阻器 1.电阻器的功能.分类和电路符号 1.1电阻器的功能 1.2电阻器的符号 1.3电阻器的分类 2.电阻器的参数与标识 2.1电阻器的参数 2.2电阻器的标识 3.电阻器常见故障判 ...
- 洛谷 T282123 电路维修
PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 T282123 电路维修 题目 题目背景 达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女 翰翰,从而被收留在地 ...
- 货车定位服务器维修要多久,卡车电路维修需要注意的维修技巧,你知道多少?...
随着电喷发动机的日渐增多,在日常车辆维修过程中,经常会进行电路方面的维修操作,例如维修电器设备.更换蓄电池.车辆长期闲置不用.车身焊接等.但是这些看似简单的事情,如果操作不当可能会导致车辆的二次损伤. ...
- 如何学好电子电路维修技术
热爱维修的朋友们,我们欢迎您.这里为您提供学习的平台,常来坐坐,相互交流.探讨:一起学习.一起进步--<?xml:namespace prefix = o ns = "urn:sche ...
- 计算机要学电路,想学电路的师傅可以看看挖掘机电脑板电路维修需要的常用设备——欢迎转载学习...
目前主流挖掘机上各部的控制系统都已采用电子控制.如发动机燃油喷射.油门电机.液压泵流量控制等等.这些控制中心俗称电脑.目前很多修配厂的技术水平同前些年相比都有很大的提高,对于电脑的故障判断都比较准确, ...
- 电路维修 -> 双端队列 BFS
[问题描述] Elf是来自Gliese星球的少女,她有一辆飞行车.飞行车电路板的整体结构是一个R行C列的网格(R,C≤500),网格的交点都是电路板的接点,每个格子都包含一个电子元件.电子元件的主要部 ...
- 电路维修AcWing
12231达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上. 翰翰的家里有一辆飞行车. 有一天飞行车的电路板突然出现了故障,导致无法启动. 电路板的整体结 ...
- 算法提高课-搜索-双端队列广搜-AcWing 175. 电路维修:deque、bfs、有点难
题目分析 来源:acwing 只有边权为0和边权为1,两种情况.什么意思呢?两个点之间存在路径则边权为0,需要转一下连通的边权为1. 每个点可能入队多次,本质上是个dijkstra算法. 下图说明bf ...
最新文章
- rest post无法取到request_小白学Flask第五天 | 详解很重要的request对象
- 《实现领域驱动设计》读书笔记
- NS2仿真分析无线网络的攻击防御(2)
- hive能替代oracle_Hive与Oracle表关联语句对比
- linux shell切割脚本,自动分割日志bash shell脚本
- Hackme.inndy - Onepunch
- java实践体会,java实践心得体会范文3篇
- 吴恩达机器学习课程笔记
- VMware GSX Server 3.2.1 Build 19281免费下载
- 领域驱动设计核心概念
- C语言读取文件所有内容
- 非对称密码之DH密钥交换算法
- 香港云服务器哪家便宜好用?
- 微信小程序输出Object,Object
- filebeat重复采集数据问题排查
- 自称菜鸟的二本大龄程序员居然拿到百度offer,还有嘉实offer(百度三面面经)
- php内容管理系统 admini,BageCMS 开源网站内容管理系统 php版下载_BageCMS 开源网站内容管理系统 php版官方下载-太平洋下载中心...
- php手机座机验证,JS校验手机号 座机 邮箱 微信号
- java用JBarcode组件生成条形码(支持自定义字体及颜色)
- php中长轮询,PHP完成长轮询【代码示例】_后端开发