Иногда проще написать код, чем прочитать его.
Пройдите это через несколько тестов, я уверен, что он всегда будет работать, пока каждое соединение является двунаправленным (например, в вашем примере).
def recursivelyMark(nodeID, nodes):
(connections, visited) = nodes[nodeID]
if visited:
return
nodes[nodeID][1] = True
for connectedNodeID in connections:
recursivelyMark(connectedNodeID, nodes)
def main():
nodes = [[[1], False], [[0], False], [[3], False], [[2], False], [[], False], [[], False]]
componentsCount = 0
for (nodeID, (connections, visited)) in enumerate(nodes):
if visited == False:
componentsCount += 1
recursivelyMark(nodeID, nodes)
print(componentsCount)
if __name__ == '__main__':
main()
Обратите внимание, что я удалил идентификатор из информации об узле, поскольку его позиция в массиве - это его идентификатор.Дайте мне знать, если эта программа не делает то, что вам нужно.