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

46 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
**Что реализовано**
- Полностью 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` – добавление узла с рефлексией
```js
addNode(node) {
if (!this.adj.has(node)) {
this.adj.set(node, new Set([node])); // reflexive edge
}
}
```
`src/index.js` – добавление ребра и авто‑добавление узлов
```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` – проверка рефлексивного ребра
```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), реализует граф с рефлексией и покрыто тестами.