news 2026/5/31 20:48:18

UVa 345 It‘s Ir-Resist-Able

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 345 It‘s Ir-Resist-Able

题目描述

电阻器是电子电路中的常见元件。每个电阻器有两个端子,当电流流过电阻器时,部分电流转化为热量,从而“抵抗”电流的流动。电阻器对电流的抵抗程度用一个正数值表示,称为电阻值,单位是欧姆(Ohms\texttt{Ohms}Ohms)。

当两个电阻器串联时,等效电阻等于各电阻值之和。当两个电阻器并联时,等效电阻的倒数等于各电阻倒数之和。

在本题中,给定一个电阻网络(由若干电阻器及其连接点组成),需要计算两个指定点之间的等效电阻。

输入格式

输入包含多个测试用例。每个测试用例以一行三个整数NNNAAABBB开始:

  • NNN:电阻器数量(不超过303030
  • AAABBB:需要计算等效电阻的两个端点标签

接下来NNN行,每行包含两个整数(连接点标签)和一个实数(电阻值)。

输入以N=A=B=0N = A = B = 0N=A=B=0结束。

输出格式

对于每个测试用例,输出一行,包含用例编号和等效电阻(保留两位小数),格式如样例所示。

样例输入

2 1 3 1 2 100 2 3 200 2 1 2 1 2 100 1 2 150 6 1 6 1 2 500 1 3 15 3 4 40 3 5 100 4 6 60 5 6 50 0 0 0

样例输出

Case 1: 300.00 Ohms Case 2: 60.00 Ohms Case 3: 75.00 Ohms

题目分析

问题的本质

这是一个电阻网络分析问题。给定一个由电阻器组成的网络,需要计算两个节点之间的等效电阻。由于电阻网络可能包含复杂的串并联组合(甚至更复杂的桥式结构),需要使用节点电压法nodal analysis\texttt{nodal analysis}nodal analysis)结合基尔霍夫定律求解。

基尔霍夫定律

  • 基尔霍夫电流定律(KCL\texttt{KCL}KCL:流入任一节点的电流代数和为零
  • 基尔霍夫电压定律(KVL\texttt{KVL}KVL:任一回路中电压降的代数和为零

节点电压法

选取一个参考节点(电压为000),其他节点的电压为未知量。对于每个节点,根据KCL\texttt{KCL}KCL建立方程:

∑jVi−VjRij=0 \sum_{j} \frac{V_i - V_j}{R_{ij}} = 0jRijViVj=0

其中RijR_{ij}Rij是节点iiijjj之间的电阻(如果有多个电阻并联,需先合并)。

边界条件

在本问题中:

  • 设起点AAA的电压为VA=1000V_A = 1000VA=1000(任意正数)
  • 设终点BBB的电压为VB=0V_B = 0VB=0
  • 其他节点的电压为未知量

求解过程

  1. 建立节点电压方程组
  2. 使用高斯消元法求解各节点电压
  3. 计算从BBB节点流出的总电流III(或流入AAA的电流)
  4. 等效电阻Req=(VA−VB)/IR_{eq} = (V_A - V_B) / IReq=(VAVB)/I

解题思路

步骤一:离散化节点标签

电阻器的连接点标签是任意正整数,需要映射到0∼C−10 \sim C-10C1的连续索引。

map<int,int>indexer;for(inti=0;i<N;i++){cin>>X>>Y>>R;if(indexer.find(X)==indexer.end())indexer[X]=label++;if(indexer.find(Y)==indexer.end())indexer[Y]=label++;}

步骤二:合并并联电阻

对于同一对节点之间可能有多条并联电阻,需要先合并:

resistor[idxX][idxY]+=1.0/R;resistor[idxY][idxX]+=1.0/R;

计算等效电阻时,取倒数:

for(inti=0;i<C;i++)for(intj=0;j<C;j++)if(resistor[i][j]>0)resistor[i][j]=1.0/resistor[i][j];

步骤三:建立节点电压方程

对于每个节点(除AAABBB外),根据KCL\texttt{KCL}KCL建立方程:

∑jVi−VjRij=0 \sum_{j} \frac{V_i - V_j}{R_{ij}} = 0jRijViVj=0

整理得:

(∑j1Rij)Vi−∑j1RijVj=0 \left(\sum_{j} \frac{1}{R_{ij}}\right) V_i - \sum_{j} \frac{1}{R_{ij}} V_j = 0(jRij1)VijRij1Vj=0

在矩阵中:

  • 对角线元素matrix[i][i]减去1Rij\frac{1}{R_{ij}}Rij1
  • 非对角线元素matrix[i][j]加上1Rij\frac{1}{R_{ij}}Rij1

步骤四:设置边界条件

对于AAABBB节点,其电压已知,不需要建立KCL\texttt{KCL}KCL方程。将它们的方程设为:

matrix[idxA][idxA]=1.0;matrix[idxB][idxB]=1.0;voltage[idxA]=1000.0;voltage[idxB]=0.0;

步骤五:高斯消元求解

使用列主元高斯消元法求解线性方程组Ax=bAx = bAx=b

步骤六:计算总电流和等效电阻

BBB节点计算流入的总电流:

doublecurrent=0.0;for(intnode=0;node<C;node++)if(resistor[node][idxB]>EPSILON)current+=(voltage[node]-voltage[idxB])/resistor[node][idxB];

等效电阻:

Req=(voltage[idxA]-voltage[idxB])/current;

参考代码

// It's Ir-Resist-Able!// UVa ID: 345// Verdict: Accepted// Submission Date: 2016-11-15// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;constintMAXN=100;constdoubleEPSILON=1e-8;// 不考虑其他连接点影响时,两个连接点间的阻值doubleresistor[MAXN][MAXN];// 各个连接点的电势doublevoltage[MAXN];// 列主元高斯消元法求解线性方程组 Ax = bboolgaussianElimination(vector<vector<double>>&A,vector<double>&b){intn=A.size();// 将 b 作为增广矩阵的最后一列for(inti=0;i<n;i++)A[i].push_back(b[i]);for(inti=0;i<n;i++){// 选取主元(绝对值最大的行)intpivot=i;for(intj=i;j<n;j++)if(fabs(A[j][i])>fabs(A[pivot][i]))pivot=j;swap(A[i],A[pivot]);// 矩阵奇异if(fabs(A[i][i])<EPSILON)returnfalse;// 将主元归一化for(intj=i+1;j<=n;j++)A[i][j]/=A[i][i];// 消去其他行的当前列for(intj=0;j<n;j++)if(i!=j)for(intk=i+1;k<=n;k++)A[j][k]-=A[j][i]*A[i][k];}// 提取解for(inti=0;i<n;i++)b[i]=A[i][n];returntrue;}intmain(intargc,char*argv[]){intN,A,B,X,Y,cases=0;doubleR;while(cin>>N>>A>>B,N>0){cout<<"Case "<<++cases<<": ";// 初始化电阻矩阵for(inti=0;i<MAXN;i++)for(intj=0;j<MAXN;j++)resistor[i][j]=0.0;// 离散化节点标签map<int,int>indexer;intlabel=0;for(inti=0;i<N;i++){cin>>X>>Y>>R;if(indexer.find(X)==indexer.end())indexer[X]=label++;if(indexer.find(Y)==indexer.end())indexer[Y]=label++;// 合并并联电阻:存储电导(1/R)resistor[indexer[X]][indexer[Y]]+=1.0/R;resistor[indexer[Y]][indexer[X]]+=1.0/R;}intC=indexer.size();// 将电导转换回电阻for(inti=0;i<C;i++)for(intj=0;j<C;j++)if(resistor[i][j]>EPSILON)resistor[i][j]=1.0/resistor[i][j];elseresistor[i][j]=0.0;// 构建节点电压方程组vector<vector<double>>matrix(C,vector<double>(C,0.0));vector<double>voltage(C,0.0);// 设置边界条件:起点电压 1000,终点电压 0intidxA=indexer[A],idxB=indexer[B];voltage[idxA]=1000.0;voltage[idxB]=0.0;// 起点和终点的方程简化为 V = 已知值matrix[idxA][idxA]=matrix[idxB][idxB]=1.0;// 为其他节点建立 KCL 方程for(intnode=0;node<C;node++){if(node==idxA||node==idxB)continue;for(intother=0;other<C;other++){if(resistor[node][other]>EPSILON){doubleconductance=1.0/resistor[node][other];matrix[node][other]+=conductance;matrix[node][node]-=conductance;}}}// 求解节点电压gaussianElimination(matrix,voltage);// 计算从终点 B 流出的总电流doublecurrent=0.0;for(intnode=0;node<C;node++)if(resistor[node][idxB]>EPSILON)current+=(voltage[node]-voltage[idxB])/resistor[node][idxB];// 欧姆定律计算等效电阻if(fabs(current)<EPSILON)cout<<"0.00 Ohms\n";else{cout<<fixed<<setprecision(2);cout<<(voltage[idxA]-voltage[idxB])/current;cout<<" Ohms\n";}}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 20:28:42

深度学习生成模型(五)—— 自回归生成与 Normalizing Flow(五十三)

1. 定位导航 第 49-52 篇我们看完了 VAE、GAN、扩散、AE。生成模型还有两个重要分支: 分支 代表 特点 自回归 GPT, PixelRNN, WaveNet 链式分解,精确似然 Normalizing Flow RealNVP, Glow, FFJORD 可逆变换,精确似然 → 两者共同特点:直接计算 log⁡P(x)\log P(x)log

作者头像 李华
网站建设 2026/5/31 20:26:32

3天掌握ODrive:开源电机控制器的高性能控制算法实战

3天掌握ODrive&#xff1a;开源电机控制器的高性能控制算法实战 【免费下载链接】ODrive High performance motor control 项目地址: https://gitcode.com/gh_mirrors/od/ODrive 你是否在为机器人项目寻找精准的电机控制方案&#xff1f;面对复杂的控制算法和繁琐的参数…

作者头像 李华
网站建设 2026/5/31 20:21:31

Java程序员面试必备并发编程笔记公开!

有出去面试的朋友肯定深有感受&#xff0c;像我们刚入行那会面试的加分项现在卷得已经成为了面试的基础题&#xff08;手动狗头&#xff09;。其中最典型的就属这个Java并发编程了。之前一般只有大厂才会有高并发编程相关的面试内容&#xff0c;但现在只要你入了Java行业就会涉…

作者头像 李华
网站建设 2026/5/31 20:21:01

基于Arduino IoT Cloud的智能宠物喂食器:远程控制与物联网实战

1. 项目概述与核心思路 养宠物的朋友大概都遇到过类似的烦恼&#xff1a;临时需要出门&#xff0c;家里的毛孩子没人照看&#xff0c;或者像我们朋友家那只叫“果冻”的老年犬一样&#xff0c;有分离焦虑症&#xff0c;主人一离开就坐立不安。传统的定时喂食器虽然能解决“定时…

作者头像 李华
网站建设 2026/5/31 20:17:46

【紧急预警】Gemini 2.5升级后新增的Content-Transfer-Encoding强制校验,已致147家SaaS企业传输中断(含热修复补丁)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini跨境数据传输 Gemini 作为 Google 推出的多模态大模型&#xff0c;在全球范围内提供服务时面临严格的跨境数据合规要求。其数据传输机制需同时满足 GDPR、CCPA 及中国《个人信息出境标准合同办法…

作者头像 李华