import { Node, Connection } from '../../../../../types/core'; import { GraphCharacteristics, LayoutAlgorithm, AdjacencyMap } from './types'; /** * Build outgoing adjacency map from connections */ export declare function buildOutgoingMap(nodes: Node[], connections: Connection[]): AdjacencyMap; /** * Build incoming adjacency map from connections */ export declare function buildIncomingMap(nodes: Node[], connections: Connection[]): AdjacencyMap; /** * Build bidirectional adjacency map (treats graph as undirected) */ export declare function buildBidirectionalMap(nodes: Node[], connections: Connection[]): AdjacencyMap; /** * Detect cycles in directed graph using DFS coloring * Returns true if the graph contains at least one cycle */ export declare function detectCycles(nodes: Node[], outgoing: AdjacencyMap): boolean; /** * Count connected components using union-find approach */ export declare function countConnectedComponents(nodes: Node[], bidirectional: AdjacencyMap): number; /** * Check if the graph is a tree * A tree has exactly n-1 edges, no cycles, and is connected */ export declare function isTree(nodes: Node[], connections: Connection[], outgoing: AdjacencyMap, bidirectional: AdjacencyMap): boolean; /** * Calculate graph density * density = edges / (nodes * (nodes - 1)) for directed graph */ export declare function calculateDensity(nodeCount: number, edgeCount: number): number; /** * Calculate degree statistics */ export declare function calculateDegreeStats(nodes: Node[], outgoing: AdjacencyMap, incoming: AdjacencyMap): { maxDegree: number; avgDegree: number; }; /** * Analyze graph characteristics for algorithm selection */ export declare function analyzeGraph(nodes: Node[], connections: Connection[]): GraphCharacteristics; /** * Select optimal layout algorithm based on graph characteristics */ export declare function selectAlgorithm(characteristics: GraphCharacteristics): LayoutAlgorithm;