简介

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

效果

整体代码如下

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 Map() function* recur(node) {
if (visit.has(node)) return
yield node
for (const x of node.AdjNodes) {
yield* recur(x)
}
} let v = this.nodes[Symbol.iterator]().next().value for (const i of recur(v))
visit.set(i) return visit.size === this.nodes.size
}
}
let g = new RandomGraph(6)
g.print()
console.log(`g.ifConnected:${g.ifConnected()}`);

修改之前的代码:

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
}
}

最新文章

  1. 如何使用ArcGIS Online的地图数据作为底图
  2. Android Event
  3. Spark SQL 之 Performance Tuning &amp; Distributed SQL Engine
  4. 转:遗传算法解决TSP问题
  5. 作业七:团队项目——Alpha版本冲刺阶段-04
  6. jquery easy ui 1.3.4 Tree树形菜单(9)
  7. ArcGIS Engine开发之旅03--ArcGIS Engine中的控件
  8. php创建网站问题
  9. 198. House Robber
  10. APUE 读书笔记 -----孤儿进程与僵尸进程[总结] +数据结构+C
  11. Java NIO与IO
  12. .NET Core 1.1日期解析无APi、SQL Server数据转换JSON
  13. 微信iOS消息拦截插件教程-Tweak HelloWorld
  14. Winform控件Tag使用规范
  15. Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode/encode
  16. Unity pdb2mdb错误
  17. XML语言1.简介和语法
  18. sqoop mysql导入hive 数值类型变成null的问题分析
  19. 获取当前最顶层的VC
  20. rpm 包的安装、卸载、升级、查询、验证

热门文章

  1. Day06:运算符详解
  2. 【笔记】CF1251E Voting 及相关
  3. 2022-11-04 Acwing每日一题
  4. 让 Serverless 更普惠,阿里云函数计算 FC 宣布全面降价,最大幅度达 37.5%
  5. postman的运用
  6. [信息抽取]基于ERNIE3.0的多对多信息抽取算法:属性关系抽取
  7. 基础css样式
  8. static_cast和dynamic_cast
  9. Qt操作Json小结
  10. LeetCode HOT 100:组合总和