makit
Version:
Make in JavaScript done right!
71 lines (70 loc) • 1.86 kB
TypeScript
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 {};