Files
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

55 lines
1.2 KiB
JavaScript

import Graph from '../Graph';
import PriorityQueue from './PriorityQueue';
var prim = function prim(graph, weightFn) {
var result = new Graph();
var parents = new Map();
var pq = new PriorityQueue();
var v;
function updateNeighbors(edge) {
var w = edge.v === v ? edge.w : edge.v;
var pri = pq.priority(w);
if (pri !== undefined) {
var edgeWeight = weightFn(edge);
if (edgeWeight < pri) {
parents.set(w, v);
pq.decrease(w, edgeWeight);
}
}
}
if (graph.nodeCount() === 0) {
return result;
}
graph.nodes().forEach(function (node) {
pq.add(node, Number.POSITIVE_INFINITY);
result.setNode(node);
}); // Start from an arbitrary node
pq.decrease(graph.nodes()[0], 0);
var init = false;
while (pq.size() > 0) {
var _graph$nodeEdges;
v = pq.removeMin();
if (parents.has(v)) {
result.setEdge(v, parents.get(v));
} else if (init) {
throw new Error('Input graph is not connected: ' + graph.graph());
} else {
init = true;
}
(_graph$nodeEdges = graph.nodeEdges(v)) === null || _graph$nodeEdges === void 0 ? void 0 : _graph$nodeEdges.forEach(updateNeighbors);
}
return result;
};
export default prim;