08-27-周三_17-09-29

This commit is contained in:
2025-08-27 17:10:05 +08:00
commit 86df397d8f
12735 changed files with 1145479 additions and 0 deletions

86
node_modules/dagre-layout/lib/parent-dummy-chains.js generated vendored Normal file
View File

@@ -0,0 +1,86 @@
import _ from 'lodash'
function parentDummyChains (g) {
const postorderNums = postorder(g)
_.forEach(g.graph().dummyChains, function (v) {
let node = g.node(v)
const edgeObj = node.edgeObj
const pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w)
const path = pathData.path
const lca = pathData.lca
let pathIdx = 0
let pathV = path[pathIdx]
let ascending = true
while (v !== edgeObj.w) {
node = g.node(v)
if (ascending) {
while ((pathV = path[pathIdx]) !== lca &&
g.node(pathV).maxRank < node.rank) {
pathIdx++
}
if (pathV === lca) {
ascending = false
}
}
if (!ascending) {
while (pathIdx < path.length - 1 &&
g.node(pathV = path[pathIdx + 1]).minRank <= node.rank) {
pathIdx++
}
pathV = path[pathIdx]
}
g.setParent(v, pathV)
v = g.successors(v)[0]
}
})
}
// Find a path from v to w through the lowest common ancestor (LCA). Return the
// full path and the LCA.
function findPath (g, postorderNums, v, w) {
const vPath = []
const wPath = []
const low = Math.min(postorderNums[v].low, postorderNums[w].low)
const lim = Math.max(postorderNums[v].lim, postorderNums[w].lim)
let parent
let lca
// Traverse up from v to find the LCA
parent = v
do {
parent = g.parent(parent)
vPath.push(parent)
} while (parent &&
(postorderNums[parent].low > low || lim > postorderNums[parent].lim))
lca = parent
// Traverse from w to LCA
parent = w
while ((parent = g.parent(parent)) !== lca) {
wPath.push(parent)
}
return { path: vPath.concat(wPath.reverse()), lca: lca }
}
function postorder (g) {
const result = {}
let lim = 0
function dfs (v) {
const low = lim
_.forEach(g.children(v), dfs)
result[v] = { low: low, lim: lim++ }
}
_.forEach(g.children(), dfs)
return result
}
export default parentDummyChains