一次代码重构 JavaScript 图连通性判定
2024-09-18 15:05:31
简介
说重构其实就是整理了代码,第一次自己手写写的很丑,然后看了书上写的,虽然和书上的思路不同但是整理后几乎一样漂亮
效果
整体代码如下
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
}
}
最新文章
- 如何使用ArcGIS Online的地图数据作为底图
- Android Event
- Spark SQL 之 Performance Tuning &; Distributed SQL Engine
- 转:遗传算法解决TSP问题
- 作业七:团队项目——Alpha版本冲刺阶段-04
- jquery easy ui 1.3.4 Tree树形菜单(9)
- ArcGIS Engine开发之旅03--ArcGIS Engine中的控件
- php创建网站问题
- 198. House Robber
- APUE 读书笔记 -----孤儿进程与僵尸进程[总结] +数据结构+C
- Java NIO与IO
- .NET Core 1.1日期解析无APi、SQL Server数据转换JSON
- 微信iOS消息拦截插件教程-Tweak HelloWorld
- Winform控件Tag使用规范
- Python2/3的中、英文字符编码与解码输出: UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode/encode
- Unity pdb2mdb错误
- XML语言1.简介和语法
- sqoop mysql导入hive 数值类型变成null的问题分析
- 获取当前最顶层的VC
- rpm 包的安装、卸载、升级、查询、验证