UNPKG

@amarillion/helixgraph

Version:

A collection of graph algorithms for game development

53 lines (52 loc) 1.86 kB
import { AdjacencyFunc, LinkFunc, WeightFunc } from "../definitions.js"; import { PriorityQueue } from "../PriorityQueue.js"; export interface PrimTieBreaker { start(): void; nextNode(): void; next(): number; } /** * Prioritize nodes that were opened last, but shuffle edges within that node. * Produces windy mazes with high river, like the recursive backtracker. */ export declare const PRIM_LAST_ADDED_RANDOM_EDGES: PrimTieBreaker; /** * Prioritize edges that were opened last. * Produces a very regular effect. No randomness at all. * Relies more on the weight function to do something interesting. */ export declare const PRIM_LAST_ADDED: PrimTieBreaker; /** * Prioritize edges completely randomly. * Produces low-river mazes with lots of branches and lots of short dead-ends. */ export declare const PRIM_RANDOM: PrimTieBreaker; type EdgeType<N, E> = { src: N; dir: E; dest: N; weight: number; tiebreaker: number; }; export declare class PrimIter<N, E> implements IterableIterator<void> { collectedNodes: Set<N>; edgeQueue: PriorityQueue<EdgeType<N, E>>; tiebreaker: PrimTieBreaker; getWeight: WeightFunc<N, E>; getAdjacent: AdjacencyFunc<N, E>; linkNodes: LinkFunc<N, E>; constructor(startNode: N, getAdjacent: AdjacencyFunc<N, E>, linkNodes: LinkFunc<N, E>, { getWeight, tiebreaker }?: { getWeight?: WeightFunc<N, E>; tiebreaker?: PrimTieBreaker; }); collectNode(node: N): void; canLinkTo(destNode: N): boolean; next(): IteratorResult<void>; [Symbol.iterator](): this; } export declare function prim<N, E>(startNode: N, getAdjacent: AdjacencyFunc<N, E>, linkNodes: LinkFunc<N, E>, { maxIterations, getWeight, tiebreaker }?: { maxIterations?: number; getWeight?: WeightFunc<N, E>; tiebreaker?: PrimTieBreaker; }): void; export {};