J'essaye d'écrire un script qui compte les composants connectés d'un graphe et je n'arrive pas à trouver la bonne solution. J'ai un graphe simple avec 6 noeuds (vertex), les noeuds 1 et 2 sont connectés, et les noeuds 3 et 4 sont connectés (6 vertexes; 1-2,3-4,5,6). Donc le graphique contient 4 composants connectés. J'utilise le script suivant pour compter les composants connectés, mais je me trompe de résultat (2).Algorithme de comptage des composants connectés d'un graphe en Python
nodes = [[1, [2], False], [2, [1], False], [3, [4], False], [4, [3], False], [5, [], False], [6, [], False]]
# 6 nodes, every node has an id, list of connected nodes and boolean whether the node has already been visited
componentsCount = 0
def mark_nodes(list_of_nodes):
global componentsCount
componentsCount = 0
for node in list_of_nodes:
node[2] = False
mark_node_auxiliary(node)
def mark_node_auxiliary(node):
global componentsCount
if not node[2] == True:
node[2] = True
for neighbor in node[1]:
nodes[neighbor - 1][2] = True
mark_node_auxiliary(nodes[neighbor - 1])
else:
unmarkedNodes = []
for neighbor in node[1]:
if not nodes[neighbor - 1][2] == True: # This condition is never met. WHY???
unmarkedNodes.append(neighbor)
componentsCount += 1
for unmarkedNode in unmarkedNodes:
mark_node_auxiliary(nodes[unmarkedNode - 1])
def get_connected_components_number(graph):
result = componentsCount
mark_nodes(graph)
for node in nodes:
if len(node[1]) == 0: # For every vertex without neighbor...
result += 1 # ... increment number of connected components by 1.
return result
print get_connected_components_number(nodes)
Quelqu'un peut-il m'aider s'il vous plaît à trouver l'erreur?
Dans 'get_connected_components_number (graphique)', il semblerait que vous marquez tous les noeuds comme visités, puis compter le nombre de noeuds sans connexions (ce qui est évidemment 2). Honnêtement, je ne sais pas ce que vous essayez de faire avec ce programme. – dln385