J'ai choisi de représenter un graphe dans Haskell par une liste de noeuds (par exemple n=[1,2,3,4]
) et une liste de paires représentant les arêtes (exemple m=[(1,2), (2,3)]
). Maintenant, je dois voir si le graphique est fortement connecté.Représentation graphique dans Haskell
Mon problème principal est de savoir s'il y a un chemin entre 2 nœuds dans le graphique. J'ai écrit quelque chose comme ça:
-- sees if 2 nodes are adjacent
adjacent x y [] = False
adjacent x y (mu:m) =
if(x== (fst mu) && y==(snd mu)) then True
else adjacent x y m
-- the successor of a node, ex for the edge (1,2) the succ of 1 is 2
suc x [] = 0
suc x (l:list) =
if(x==(fst l)) then snd l
else suc x list
-- my main function
way 0 y list = False
way x y (mu:m)
| x==y = True
| (adjacent x y (mu:m)) == True = True
| otherwise =
if ((way (suc x (mu:m)) y (mu:m))==False) then way (suc x m) y m
else True
Il fonctionne quand j'ai noeuds de degré 1, mais pour les noeuds avec un degré plus élevé, il ne fonctionne pas toujours. Pouvez-vous me donner une idée à ce sujet?
+1 pour être clair, il était devoirs! Faisons-nous savoir comment approcher l'aide. – MtnViewMark
Une fois qu'une réponse particulière vous a aidé à résoudre votre question, il est normal de la choisir (cliquez sur la coche sous le nombre de votes) pour que SO sache que la question est résolue. Indique aux membres qu'ils peuvent vouloir passer du temps sur d'autres questions maintenant. – MtnViewMark