Files
lan-manager/web/node_modules/@antv/graphlib/lib/algorithm/floyd-warshall.js
openclaw 0a5f6a8047 Initial commit: Lan-manager project code
- Go backend (server/)
- Frontend (web/, server/static/)
- Database and deployment files
- Scripts and docs

Co-Authored-By: 狸花猫/Claude-Qwen3.6-Plus 🐾
2026-04-20 00:52:58 +08:00

52 lines
1.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.floydWarshall = void 0;
var DEFAULT_WEIGHT_FUNC = function () { return 1; };
function floydWarshall(graph, weightFn, edgeFn) {
return runFloydWarshall(graph, weightFn || DEFAULT_WEIGHT_FUNC, edgeFn ||
function (v) {
return graph.outEdges(v);
});
}
exports.floydWarshall = floydWarshall;
function runFloydWarshall(graph, weightFn, edgeFn) {
var results = {};
var nodes = graph.nodes();
nodes.forEach(function (node) {
var v = String(node);
results[v] = {};
results[v][v] = { distance: 0 };
nodes.forEach(function (w) {
if (node !== w) {
results[v][String(w)] = { distance: Number.POSITIVE_INFINITY };
}
});
edgeFn(node).forEach(function (edge) {
var w = edge.v === node ? edge.w : edge.v;
var d = weightFn(edge);
results[v][String(w)] = { distance: d, predecessor: node };
});
});
nodes.forEach(function (nodek) {
var k = String(nodek);
var rowK = results[k];
nodes.forEach(function (nodei) {
var i = String(nodei);
var rowI = results[i];
nodes.forEach(function (nodej) {
var j = String(nodej);
var ik = rowI[k];
var kj = rowK[j];
var ij = rowI[j];
var altDistance = ik.distance + kj.distance;
if (altDistance < ij.distance) {
ij.distance = altDistance;
ij.predecessor = kj.predecessor;
}
});
});
});
return results;
}
exports.default = floydWarshall;