import Edge from "../../graph/edge/Edge.js"; import Graph from "../../graph/Graph.js"; import Node from "../../graph/node/Node.js"; import Step from "../AlgorithmStep.js"; import { SiguiyamaContext } from "./SiguiyamaContext.js"; /** * Реализоция алгоритма послойного рисования графа, основанного на алгоритме Сигуямы * @see [Послойное рисование графа](https://ru.wikipedia.org/wiki/Послойное_рисование_графа) */ export default class SiguiyamaAlgorithm { /** * Шаги алгоритма рисования графа * @protected */ protected readonly _steps: Step[] = []; /** * Добавление шага в алгоритм Сигуямы * @param step Шаг, который нужно добавить */ public addStep(step: Step): this { this._steps.push(step) return this; } /** * Запуск алгоритма Сигуямы * @param graph Граф, который нужно послойно отрисовать */ public run(graph: Graph>): SiguiyamaContext { const context: SiguiyamaContext = { graph, config: {} }; this._steps.forEach((step) => { step.onBeforeRun(); step.run(context); step.onAfterRun(); }) return context; } }