首页 > 编程语言 >一次代码重构 JavaScript 图连通性判定

一次代码重构 JavaScript 图连通性判定

时间:2023-01-09 18:22:07浏览次数:39  
标签:node 重构 连通性 JavaScript new const nodes id size

简介

说重构其实就是整理了代码,第一次自己手写写的很丑,然后看了书上写的,虽然和书上的思路不同但是整理后几乎一样漂亮

效果

image

整体代码如下

class Node {
  AdjNodes = new Set()
  id = ""
  constructor(id) { this.id = id }
  connect(node) {
    this.AdjNodes.add(node)
    node.AdjNodes.add(this)
  }
}
class RandomGraph {
  nodes = new Set()
  constructor(size) {
    for (let i = 0; i < size; i++) {
      this.nodes.add(new Node(i))
    }
    const threshold = 1 / size
    for (const x of this.nodes)
      for (const y of this.nodes)
        if (Math.random() < 1 / size)
          x.connect(y)
  }
  print() {
    for (const i of this.nodes) {
      let ids = [...i.AdjNodes]
        .map(x => x.id)
        .join(',')
      console.log(`${i.id}:${ids}`)
    }
  }
  ifConnected() {
    const visit = new WeakMap()

    function* recur(node) {
      if (visit.has(node)) return
      yield node
      for (const x of node.AdjNodes) {
        yield* recur(x)
      }
    }

    let v = this.nodes.entries().next()[0]

    for (const i of recur(v))
      visit.set(node)

    return a.size === this.nodes.size
  }
}
let g = new RandomGraph(6)
g.print()
console.log(`g.ifConnected:${g.ifConnected()}`);

修改之前的代码:

image

ifConnected() {
  for (const [v,_] of this.nodes.entries()) {
    let visit = new WeakMap()
    function* recur(node) {
      if (visit.has(node)) return
      yield (()=>{
        visit.set(node)
        return node
      })();
      for(const [x] of node.AdjNodes.entries()) {
        yield* recur(x)
      }
    }
    const a = new Set()
    for (const i of recur(v)) {
      console.log(i)
      a.add(i)
    }
    console.log(`node:${v.id} minG.size:${a.size}`)
    if (a.size === this.nodes.size) return true
    return false
  }
}

标签:node,重构,连通性,JavaScript,new,const,nodes,id,size
From: https://www.cnblogs.com/dou-fu-gan/p/17037881.html

相关文章

  • JavaScript 性能优化
    JavaScript是一门动态类型、解释型的编程语言,在网页开发中扮演着非常重要的角色。随着网页的复杂度和访问量的增加,JavaScript性能的优化就显得越来越重要。下面是一些常......
  • JavaScript 防抖和节流
    JavaScript防抖和节流是两种常见的性能优化技术,用于减少函数的执行次数。防抖(debounce)是指在一段时间内,如果有多次触发事件,则只执行最后一次事件。节流(throttle)是指在一......
  • JavaScript项目榜单
    JavaScript项目榜单参考资料2022年最受欢迎的JavaScript项目榜单出炉BestofJS正式公布2022年JavaScript明星项目榜单该榜单提供了过去12个月JavaScript生态......
  • javascript将文本转语音功能
    通过jiavascript将文本内容转化为语音播放,代码如下:<body><buttononclick="start()">点击</button><script>vartext='语音输入开始'var......
  • 03 JavaScript
    JavaScriptECMAScript和JavaScript的关系1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECM......
  • JavaScript 性能优化
    1.内存管理内存管理介绍内存:由可读写单元组成,表示一片可操作空间管理:人为的去操作一片空间的申请、使用和释放内存管理:开发者主动申请空间、使用空间、释放空......
  • 客服系统前端开发:JavaScript删除对象数组中指定key value的对象【唯一客服】网页在线
    经常我们有这样的需要,比如有一个对象数组,我们要把这个数组里某个对象删除掉,根据他的某一个key的value来删除可以使用JavaScript的filter()方法来删除对象数组中指定k......
  • 客服系统前端开发:JavaScript获取URL中的协议部分和域名部分【唯一客服】网页在线客服
    再客服系统中如果想要链接websocket需要确定是ws:// 还是wss://所以,我封装了两个函数,用于获取URL中的协议是HTTP还是HTTPS,以及获取到域名部分可以使用JavaScript中......
  • javascript 操作剪切板
    此库优点:支持电脑和手机端浏览器第一步:声明一个对象$(function(){varclipboard=newClipboardJS(document.getElementById("btnCopyFileShareLink"......
  • JavaScript-删除节点,克隆节点,注册事件,删除事件
    JavaScript-删除节点,克隆节点,注册事件,删除事件目录JavaScript-删除节点,克隆节点,注册事件,删除事件5.节点操作5.5删除节点5.6复制节点(克隆节点)5.8三种动态创建元素......