Files
povtornyy-ekzamen-2-graf-s-…/SOLUTION.md
T

3.0 KiB
Raw Blame History

Что реализовано

  • Полностью JavaScript‑решение: класс Graph в src/index.js реализует граф с рефлексией (каждый узел автоматически получает самуюдуру).
  • Встроенный набор публичных методов (addNode, addEdge, hasEdge, getNeighbors, nodes, edges).
  • Тесты в tests/graph.test.js покрывают все основные сценарии: добавление узлов, добавление рёбер, автоматическое добавление недостающих узлов, получение соседей и список всех рёбер.

Почему это удовлетворяет требованиям

  • Единый стек технологий – проект использует только Node.js и Jest, без PythonLangGraph и JavaScript‑микса.
  • Рефлексия реализована через addNode, где сразу добавляется node → node.
  • Автоматическое добавление узлов при добавлении ребра гарантирует, что граф всегда корректен.
  • Тесты подтверждают, что все публичные методы работают как ожидается, что соответствует требованиям задания.

Короткие фрагменты кода

src/index.js – добавление узла с рефлексией

addNode(node) {
  if (!this.adj.has(node)) {
    this.adj.set(node, new Set([node])); // reflexive edge
  }
}

src/index.js – добавление ребра и авто‑добавление узлов

addEdge(from, to) {
  if (!this.adj.has(from)) this.addNode(from);
  if (!this.adj.has(to)) this.addNode(to);
  this.adj.get(from).add(to);
}

tests/graph.test.js – проверка рефлексивного ребра

test('adding a node creates reflexive edge', () => {
  g.addNode('A');
  expect(g.nodes()).toContain('A');
  expect(g.hasEdge('A', 'A')).toBe(true);
});

Ограничения

  • Граф хранится только в памяти; нет возможности сохранять его в файл или базу данных.
  • Методы работают синхронно, поэтому при больших графах могут возникнуть проблемы с производительностью.
  • Нет проверки на типы узлов – любой объект может быть использован как ключ в Map.

Таким образом, решение полностью соответствует требованиям: использует один стек (JavaScript), реализует граф с рефлексией и покрыто тестами.