UNPKG

makit

Version:

Make in JavaScript done right!

71 lines (70 loc) 1.86 kB
declare enum VertexType { None = 0, In = 1, Out = 2, InOut = 3 } export declare class DirectedGraph<T> { private readonly vertexToString; private edges; private redges; private vertices; private root?; constructor(vertexToString?: (v: T) => string); /** * 增加一个点 * * @param v 要增加的点 * @param vertexType 点的类型(空、入、出、出入) */ addVertex(v: T, vertexType?: VertexType): void; /** * 增加一条边 * * @param fr 边的起点 * @param to 边的终点 */ addEdge(fr: T, to: T): void; /** * 检查是否包含边 * * @param fr 起点 * @param to 终点 * @return 包含返回 true 否则 false */ hasEdge(fr: T, to: T): boolean; getOutVerticies(u: T): Generator<T, void, unknown>; getInVertices(u: T): Generator<T, void, unknown>; getOutDegree(u: T): number; /** * 是否存在环状结构 * * @return 如果存在返回一个 circuit,否则返回 null */ checkCircular(u: T, path?: Set<T>, visited?: Set<T>): void; /** * 获取一条从 vertex 到 root 的路径 * * @param vertex 路径的起点 * @return 从 vertex 到 root 的路径 */ findPathToRoot(vertex: T): T[]; getInVerticesRecursively(target: T): Set<T>; /** * 以第一个点为根的树的文本表示 * * @return 树的 ASCII 文本表示 */ toString(): string; /** * 转化为 Plain Object 表示的树,用于 treeify * * 注意:使用前需要先调用 checkCircular(), * 或从数据上确保它是一棵树。 * * @return 转为 Plain Object 的树状结构 */ private toTree; preOrder(vertex: T, visited?: Set<T>): IterableIterator<T>; } export {};