import { Node } from './Node';
import { IProcess } from './interfaces/IProcess';
/**
 * Graph class
 *
 * @export
 * @class Graph
 * @template T
 * @template V
 */
export declare class Graph<T, V> {
    private _adjacencies;
    private _allowCyclic;
    private _nodes;
    /**
     * Creates an instance of Graph.
     * @param {boolean} [allowCyclic=false]
     * @memberof Graph
     */
    constructor(allowCyclic?: boolean);
    /**
     * Adds a node
     *
     * @param {Node<T, V>} node
     * @memberof Graph
     */
    addNode(node: Node<T, V>): void;
    /**
     * Adds an edge
     *
     * @param {Node<T, V>} nodeA
     * @param {Node<T, V>} nodeB
     * @memberof Graph
     */
    addEdge(nodeA: Node<T, V>, nodeB: Node<T, V>): void;
    /**
     * Prints the graph to a string
     *
     * @return {*}  {string}
     * @memberof Graph
     */
    printGraph(): string;
    /**
     * Breath first search from the given node
     *
     * @param {Node<T, V>} startNode
     * @param {IProcess<T, V>} [callBack]
     * @return {*}  {Map<T, V>}
     * @memberof Graph
     */
    breadthFirstSearch(startNode: Node<T, V>, callBack?: IProcess<T, V>): Map<T, V>;
    /**
     * Depth first search from the given node
     *
     * @param {Node<T, V>} startNode
     * @return {*}  {Map<T, V>}
     * @memberof Graph
     */
    depthFirstSearch(startNode: Node<T, V>): Map<T, V>;
    private dfsUtil;
}
