Вывести номер компоненты связности, к которой принадлежит вершина
Программа не проходит тесты... В первой строчке выходного файла выведите количество компонент связности. Далее выведите N целых чисел, i -е из них задаёт номер компоненты связности для i -й вершины. Компоненты следует нумеровать последовательными целыми числами от 1. Порядок нумерации компонент произвольный.
формат ввода:
4 2
1 2
3 4
формат вывода:
2
1 1 2 2
from sys import stdin
input = stdin.readline
n, m = map(int, input().split())
graph = [[] for _ in range(n)]
for i in range(m):
u, v = [int(i)-1 for i in input().split()]
graph[u].append(v)
graph[v].append(u)
visited = [False] * n
answer = 0
components = []
for i in range(n):
if visited[i]:
continue
answer+=1
visited[i] = True
queue = [i]
component = []
while queue:
v = queue.pop()
component.append(v+1)
for to in graph[v]:
if not visited[to]:
visited[to] = True
queue.append(to)
components.append(component)
print(answer)
l =0
for i in range(answer):
l+=1
for k in range (len(components[i])):
print(l, end = " ")
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Потому что в components лежат вершины в порядке обхода, а не в порядке нумерации. Например, если ввести 4 2 3 1 4 2, то получится 1 1 2 2, а должно быть 1 2 1 2
Как поправить, разберётесь?
На мой взгляд, проще в один список длиной n для каждой вершины записывать текущий answer, а components совсем не нужны.
co = [0] * n
...
visited[i] = True
co[i] = answer
...
visited[to] = True
co[to] = answer
print(answer)
for i in range(n):
print(co[i], end = " ")