J'essaie de résoudre ce graph problem dans Hackerrank et c'est ce que j'ai jusqu'à présent. J'utilise un dictionnaire Python pour représenter le graphe et faire en sorte que ma fonction DFS renvoie la longueur du composant connecté qu'il traverse. Mon code passe le premier cas de test mais me donne une erreur d'exécution pour certains autres cas de test. Est-ce un problème d'optimisation? Si oui, quelle partie de mon code devrais-je essayer d'optimiser? Ou devrais-je essayer une approche différente?Erreur d'exécution lorsque vous essayez de trouver des composants dans un graphique
import sys
n = input()
# Graph
g = {k:set() for k in xrange(2*n)}
# DFS stuff
visited = set()
def dfs(g,s,S=set(),dfs_sum=0):
S.add(s)
dfs_sum +=1
for i in g[s]:
if i in S: continue
dfs_sum = dfs(g,i,S,dfs_sum)
return dfs_sum
# Building the graph
for i in xrange(n):
a,b = map(int,raw_input().split())
g[a].add(b)
g[b].add(a)
# Getting the max and min lengths of the connected components
max_len, min_len = 0, sys.maxint
for i in xrange(n):
if i not in visited:
v = dfs(g,i,visited)
if v > 1: # Ignore single nodes
max_len, min_len = max(max_len, v), min(min_len, v)
print("{} {}".format(min_len,max_len))
Merci! Il s'avère que c'était les deux! Certaines des erreurs d'exécution étaient KeyErrors parce que le graphique n'était pas construit correctement en raison de mon indexation incorrecte. J'ai mis la limite de récursivité comme vous l'avez dit et changé le graphe en 'g = {k: set() pour k en xrange (1,2 * n + 1)}' et ça a bien fonctionné. Aussi, j'ai changé la dernière pour la gamme de boucle de 'range (n)' à 'range (1, n + 1)' – spidertothefly127