首页 > 编程语言 >基于方阵的简单电路连通判断算法

基于方阵的简单电路连通判断算法

时间:2024-07-03 09:41:44浏览次数:14  
标签:连通 ln param 算法 元器件 rec line 方阵 rect

对于一个电路系统中,给定若干个元器件和若干条导线,以及使用导线连接元器件的操作过程,如何判断操作完成后最终某个元器件是否在与电源相连的回路中?
实际对于该类问题,无需纠结导线的连接方式与所谓的“回路”,只需判断元器件是否间接或直接与电源正负极相连。
本文提出使用方阵存储元器件间连接状态。
即将每一个元器件以及电源的正负极,看为独立的点,即方阵的行和列;方阵初始为零方阵;
每做一次连接操作,则将方阵对应行列上的值标识为1。这一步是为了记录两个元器件间的连接状态。
然后再将两个元器件对应的两行元素做或运算(or-operation),即“有1取1,无1取0”,得到的结果替换掉这两行。这一步是为了传导元器件的连接状态,即实现“0与1连通,1与2连通,推导出0与2连通”。
完成若干轮操作后,取方阵的下三角部分再进行一次遍历:若行i和列j对应的两个元器件是连通状态,则取其对应的两行(即行i和行j)再做一次或运算。这一步是为了确保所有元器件的连接状态都完成了传导。

完整代码如下:

/**
* initial link rect
* @param	component_num	the number of components in electric system
* @returns	two-dimensional array
*/
function init(component_num) {
  rec = new Array(component_num)
  for (let i = 0; i < component_num; i += 1) {
    rec[i] = new Array(component_num)
    rec[i].fill(0)
  }
  return rec
}

/** 
* or operation for two lines
* @param	line_1	the first line
* @param	line_2	the second line
* @returns	a one-dimensional array about the or-operation result between line_1 and line_2 
*/
function or(line_1, line_2) {
  return line_1.map((_, i) => line_1[i] | line_2[i])
}

/** 
* mock link action
* @param	rec	the link rect 
* @param 	begin 	the index of begin node
* @param	end 	the index of end node
* @returns
*/
function mockLn (rec, begin, end) {
    let x = begin > end ? begin : end
    let y = begin > end ? end : begin
    rec[x][y] = 1

    rec[x] = rec[y] = or(rec[x], rec[y])
}

/** 
* the final check of one circle, in order to find the omissive point
* @param	rec	the link rect
* @returns
*/
function finalCheck(rec) {
  for (let i = 0; i < rec.length; i += 1) {
    for (let j = 0; j < i; j += 1) {
      if (rec[i][j]) rec[i] = rec[j] = or(rec[i], rec[j])
    }
  }
}

/** main */
(function (...args) {
  let ln_rec = init(6)

  console.info("============== following initialization rect ===============")
  console.info(ln_rec)  
  console.info("============== rect initialization complete ================")

  mockLn(ln_rec, 0, 2)
  mockLn(ln_rec, 1, 3)
  mockLn(ln_rec, 2, 3)
  mockLn(ln_rec, 4, 5)

  finalCheck(ln_rec)

  console.info("============== result rect ===============")
  console.info(ln_rec)
  console.info("============== result rect ===============")

})()

标签:连通,ln,param,算法,元器件,rec,line,方阵,rect
From: https://www.cnblogs.com/seal-sill/p/18280991

相关文章

  • PCL 点云聚类(基于体素连通性)
    文章目录一、简介二、实现代码三、实现效果参考资料一、简介这里的思路很简单,我们通过将点云转换为体素,基于体素的连通性实现对点云的聚类(有点类似于欧式聚类),不过这种方式进行的聚类有些粗糙,但聚类速度相对会快很多,具体的实现效果可以详细阅读代码。二、实现......
  • 【hash】hash算法、hash函数、哈希表、布隆过滤器、一致性哈希
    哈希函数的基本性质函数定义域是无穷的,值域相对有限(但也很大,比如2的64次方)输入同样样本一定得到同样的输出输入不同样本可能得到相同输出,此时叫哈希碰撞输入大量不同的样本,得到大量输出值,会几乎均匀的分布在整个输出域上布隆过滤器通过几个不同哈希函数计算哈希值,对位......
  • 排序算法
    排序算法的整理和比较。一、基本概念  排序算法就是将一序列对象根据某个关键字进行排序。各个排序算法的时间复杂度和空间复杂度不尽相同,所需的条件和适用范围也不同。一般根据元素的相对位置分为稳定排序算法和非稳定的排序算法。也可根据执行情况分为内排序和外排序。另......
  • [JLU] 数据结构与算法上机题解思路分享-第三次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)正文A图的创建分数10作者朱允刚单位吉林大学请编写程序创建一个有向图。有向图中包含......
  • 代码随想录算法训练营第四十五天 | 打家劫舍
    198.打家劫舍题目链接文章讲解视频讲解dp[j]:表示投到第j家最多能偷dp[j]的钱递推公式:dp[j]=max(dp[j-2]+nums[j],dp[j-1])初始化:dp[0]=nums[0],dp[1]=max(dp[0],dp[1])遍历顺序:从小到大打印dp数组classSolution{public:introb(vector<int>&n......
  • 算法——全排列
    一、使用递归算法求全排列(暴力法)求{12345......n}的全排列的思路如下:(1)让第一个数不同,得到n个数列(办法是:把第1个和后面每个数交换即可):12345......n21345......n.....n2345......1以上n个数列,只要第一个数不同,不管后面n-1个数是怎么排列的,这n个......
  • 算法入门(1) 7.2
    【深基2.例12】上学迟到题目描述学校和yyy的家之间的距离为$s$米,而yyy以$v$米每分钟的速度匀速走向学校。在上学的路上,yyy还要额外花费$10$分钟的时间进行垃圾分类。学校要求必须在上午$\textrm{8:00}$到达,请计算在不迟到的前提下,yyy最晚能什么时候出门。由于......
  • 对于LGBM来说可行的优化算法
    除了熵权法(EntropyWeightMethod,EWM)以外,还有许多其他方法可以用来优化LightGBM(LGBM)模型。以下是一些常见的优化方法:1.网格搜索(GridSearch)网格搜索是通过穷举法搜索超参数空间的所有可能组合,找到最优的超参数配置。虽然这种方法计算开销较大,但可以确保找到全局最优解......
  • 第二十六天 第七章 回溯算法 part04 491.递增子序列 46.全排列 47.全排列 II
    491.递增子序列将其看作一个二叉树,可以知道,在二叉树每层中,不能取相同的元素。这题最主要要理解这个点。使用unordered_set对其进行降重。classSolution{public:vector<vector<int>>res;vector<int>cur;voidbacktracking(vector<int>&nums,intindex){......
  • 遗传算法(Genetic Algorithm, GA)
        遗传算法是一种基于生物进化的计算模型,通过模拟自然选择和基因遗传的过程来寻找最优解或者近似最优解的算法。遗传算法由美国科学家JohnHolland在上世纪70年代提出,是一种全局优化搜索算法。     遗传算法的基本原理是通过模拟生物进化过程中的自然选择和......