Files
freeCodeCamp/curriculum/challenges/ukrainian/10-coding-interview-prep/data-structures/adjacency-list.md
2024-06-11 19:02:29 +02:00

3.4 KiB
Raw Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d8256367417b2b2512c77 Список суміжності 1 301620 adjacency-list

--description--

Графи можуть бути представлені різними способами. У цьому завданні розглянемо один з них, який називають списком суміжності. По суті, список суміжності — це маркований список, зліва якого є вершина, а справа перераховуються всі інші вершини, з якими вона з’єднана. Нижче наведено представлення списку суміжності.

Вершина1: Вершина2, Вершина3
Вершина2: Вершина1
Вершина3: Вершина1

Вищенаведений приклад є неорієнтованим графом, оскільки Вершина1 з’єднана з Вершина2 та Вершина3, і ця інформація відповідає з’єднанню Вершина2 та Вершина3. Список суміжності для орієнтованого графа означатиме, що кожен ряд списку показує напрямок. Якби наведений вище граф був орієнтованим, то Вершина2: Вершина1 означало б, що ребро вказує напрямок від Вершина2 до Вершина1. Ми можемо представити згаданий вище неорієнтований граф у вигляді списку суміжності, помістивши його в об’єкті JavaScript.

var undirectedG = {
  Node1: ["Node2", "Node3"],
  Node2: ["Node1"],
  Node3: ["Node1"]
};

Також його можна легше представити у вигляді масиву, де мітками вершин є числа, а не рядки.

var undirectedGArr = [
  [1, 2], // Node1
  [0],    // Node2
  [0]     // Node3
];

--instructions--

Створіть соціальну мережу у вигляді неорієнтованого графа з 4 вершинами/людьми, яких звати James, Jill, Jenny та Jeff. Між James та Jeff, Jill та Jenny, Jeff та Jenny існують ребра/зв’язки.

--hints--

undirectedAdjList має містити лише чотири вершини.

assert(Object.keys(undirectedAdjList).length === 4);

Між Jeff та James має бути ребро.

assert(
  undirectedAdjList.James.indexOf('Jeff') !== -1 &&
    undirectedAdjList.Jeff.indexOf('James') !== -1
);

Між Jill та Jenny має бути ребро.

assert(
  undirectedAdjList.Jill.indexOf('Jenny') !== -1 &&
    undirectedAdjList.Jenny.indexOf('Jill') !== -1
);

Між Jeff та Jenny має бути ребро.

assert(
  undirectedAdjList.Jeff.indexOf('Jenny') !== -1 &&
    undirectedAdjList.Jenny.indexOf('Jeff') !== -1
);

--seed--

--seed-contents--

var undirectedAdjList = {};

--solutions--

var undirectedAdjList = {
  James: ['Jeff'],
  Jill: ['Jenny'],
  Jenny: ['Jill', 'Jeff'],
  Jeff: ['James', 'Jenny']
};