Змагання
Ваша програма повинна взяти 3 входи:
- Позитивне ціле число - кількість змінних,
- Сукупність не упорядкованих пар цілих чисел, де кожна пара являє собою рівність між змінними, і
- Позитивне ціле число, яке представляє стартову змінну,
Він повинен повернути набір невід’ємних цілих чисел, які представляють усі змінні, які можуть бути показані як перехідно рівні початкової змінної (включаючи саму стартову змінну).
Іншими словами, при входах N
, E
і S
, повертати набір Q
, таким чином, що:
S ∈ Q
.- Якщо
Z ∈ Q
і(Y = Z) ∈ E
тодіY ∈ Q
. - Якщо
Z ∈ Q
і(Z = Y) ∈ E
тодіY ∈ Q
.
Це також можна виразити як теорія графів :
Враховуючи непрямий графік і вершину в графі, перерахуйте вершини в його з'єднаній складовій .
Технічні умови
- Ви можете використовувати індексацію на основі 0 або 1.
- Перший вхід підраховує кількість присутніх змінних, де змінні задаються як числа. Крім того, ви не можете прийняти цей ввід, і в цьому випадку це вважається рівним або найвищому змінному індексу, який присутній, або одному більше, ніж цей, залежно від вашої схеми індексації.
- Ви можете припустити, що вхід добре сформований: вам не дадуть змінних за межами діапазону, визначеного першим входом. Наприклад,
3, [1 = 2, 2 = 0], 1
є коректним вводом, тоді4, [1 = 719, 1 = 2, 3 = 2], -3
як ні. - Ви не можете припустити, що будь-яка змінна матиме з нею будь-які рівності. Якщо дано третій вхід, який є "одиноким" (не має рівностей), правильний вихід - це односинний набір, що містить лише цей вхід (оскільки він дорівнює самому).
- Ви можете припустити, що рівності не будуть містити рівності від змінної до себе, і що однакова рівність не буде надана багаторазово (сюди входять такі речі, як
1 = 2
і2 = 1
). - Ви можете припустити, що всі задані цілі числа знаходяться в межах вашої мови.
- Ви можете взяти другий вхід у будь-якому розумному форматі.
Ось кілька розумних форматів:
0 = 2
0 = 3
1 = 0
{(0, 2), (0, 3), (1, 0)}
[0, 2, 0, 3, 1, 0]
0 2 0 3 1 0
Graph[{{0, 2}, {0, 3}, {1, 0}}]
[0 = 2, 0 = 3, 1 = 0]
- Ви можете виводити в будь-якому розумному форматі (наприклад, набір, список тощо). Порядок не має значення.
Оцінка балів
Це код-гольф , тому виграє найкоротша дійсна програма (у байтах).
Випробування (0-індексовано)
3, [1 = 2, 2 = 0], 1 -> {0, 1, 2}
5, [0 = 2, 0 = 3, 1 = 2], 3 -> {0, 1, 2, 3}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 4 -> {2, 4}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 5 -> {0, 1, 3, 5}
5, [0 = 1, 2 = 0, 0 = 3, 4 = 0], 2 -> {0, 1, 2, 3, 4}
6, [0 = 1, 1 = 2, 2 = 3, 3 = 4, 4 = 5], 3 -> {0, 1, 2, 3, 4, 5}
4, [0 = 1, 1 = 2, 2 = 0], 3 -> {3}
5, [0 = 2, 2 = 4], 2 -> {0, 2, 4}
8, [], 7 -> {7}
Випробування (1-індексований)
3, [2 = 3, 3 = 1], 2 -> {1, 2, 3}
5, [1 = 3, 1 = 4, 2 = 3], 4 -> {1, 2, 3, 4}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 5 -> {3, 5}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 6 -> {1, 2, 4, 6}
5, [1 = 2, 3 = 1, 1 = 4, 5 = 1], 3 -> {1, 2, 3, 4, 5}
6, [1 = 2, 2 = 3, 3 = 4, 4 = 5, 5 = 6], 4 -> {1, 2, 3, 4, 5, 6}
4, [1 = 2, 2 = 3, 3 = 1], 4 -> {4}
5, [1 = 3, 3 = 5], 3 -> {1, 3, 5}
8, [], 8 -> {8}