/**
 * GraphPathFinding — shortest/weighted/heuristic path algorithms.
 *
 * Contains: shortestPath, isReachable, weightedShortestPath, aStarSearch,
 * bidirectionalAStar. Fully self-contained — no other algorithm module
 * calls into this one.
 *
 * @module domain/services/query/GraphPathFinding
 */
import type { Direction, NeighborOptions } from '../../../ports/NeighborProviderPort.ts';
import MinHeap from '../../utils/MinHeap.ts';
import { type RunStats, type TraversalStats, type WeightFn, type default as TraversalContext } from './TraversalContext.ts';
export default class GraphPathFinding {
    private readonly _ctx;
    constructor(ctx: TraversalContext);
    shortestPath(params: {
        start: string;
        goal: string;
        direction?: Direction;
        options?: NeighborOptions;
        maxNodes?: number;
        maxDepth?: number;
        signal?: AbortSignal;
    }): Promise<{
        found: boolean;
        path: string[];
        length: number;
        stats: TraversalStats;
    }>;
    isReachable(params: {
        start: string;
        goal: string;
        direction?: Direction;
        options?: NeighborOptions;
        maxNodes?: number;
        maxDepth?: number;
        signal?: AbortSignal;
    }): Promise<{
        reachable: boolean;
        stats: TraversalStats;
    }>;
    weightedShortestPath(params: {
        start: string;
        goal: string;
        direction?: Direction;
        options?: NeighborOptions;
        weightFn?: WeightFn;
        nodeWeightFn?: (nodeId: string) => number | Promise<number>;
        maxNodes?: number;
        signal?: AbortSignal;
    }): Promise<{
        path: string[];
        totalCost: number;
        stats: TraversalStats;
    }>;
    aStarSearch(params: {
        start: string;
        goal: string;
        direction?: Direction;
        options?: NeighborOptions;
        weightFn?: WeightFn;
        nodeWeightFn?: (nodeId: string) => number | Promise<number>;
        heuristicFn?: (nodeId: string, goalId: string) => number;
        maxNodes?: number;
        signal?: AbortSignal;
    }): Promise<{
        path: string[];
        totalCost: number;
        nodesExplored: number;
        stats: TraversalStats;
    }>;
    bidirectionalAStar(params: {
        start: string;
        goal: string;
        options?: NeighborOptions;
        weightFn?: WeightFn;
        nodeWeightFn?: (nodeId: string) => number | Promise<number>;
        forwardHeuristic?: (nodeId: string, goalId: string) => number;
        backwardHeuristic?: (nodeId: string, goalId: string) => number;
        maxNodes?: number;
        signal?: AbortSignal;
    }): Promise<{
        path: string[];
        totalCost: number;
        nodesExplored: number;
        stats: TraversalStats;
    }>;
    _biAStarExpand(p: {
        heap: MinHeap<string>;
        visited: Set<string>;
        gScore: Map<string, number>;
        predMap: Map<string, string>;
        otherVisited: Set<string>;
        otherG: Map<string, number>;
        weightFn: WeightFn;
        heuristicFn: (nodeId: string, goalId: string) => number;
        target: string;
        directionForNeighbors: Direction;
        options?: NeighborOptions | undefined;
        mu: number;
        meeting: string | null;
        rs: RunStats;
    }): Promise<{
        explored: number;
        mu: number;
        meeting: string | null;
    }>;
}
