2017-09-18 1 views
-1

Trouver les voisins des voisins d'un nœud - Python

Ce qui suit est un graphique que j'utilise pour trouver les voisins de nœuds verts. Les nœuds verts sont dans un ensemble différent appelé new = [12,13,14,15,16,17,18,19,20,21,22,23,24,25]. Lorsque j'accède au premier nœud vert 12; il a deux voisins 15 et 21 .Mais 21 a un autre voisin vert et donc j'ai besoin qu'ils soient dans ma liste de voisins du noeud 12. Cela devrait être répété jusqu'à ce que les nœuds verts rencontrent les rouges. Donc, finalement, l'ensemble des voisins du nœud 12 devrait être [0,15,21,14,16,134,23,19,3]. quelqu'un peut-il m'aider s'il vous plaît à trouver cela?

+0

Il serait utile si vous deviez fournir une liste de tuples des arêtes ou similaires au lieu d'une image de telle sorte que les gens peuvent expérimenter facilement s'ils choisissent de ... (ou le code que vous avez utilisé jusqu'à présent en utilisant networkx pour arriver au point où vous avez un graphique, mais qui rencontrent maintenant des difficultés avec le côté algorithme) –

+0

Mais c'est quelque chose avec deux types différents de nœuds; vert et rouge. – ccc

+0

Bon ... donc le code que vous avez qui représente les données de manière appropriée afin que quelqu'un puisse le ramasser et résoudre le problème que vous avez/l'approche que vous prenez dans ce .. –

Répondre

1

pseudo-code, puisque vous ne l'avez pas du tout spécifier comment votre graphique fonctionne:

def findNeighbors (node, greens, visited = None): 
    if visited is None: 
     visited = set() 

    for n in node.directNeighbors: 
     # visit node if it’s new 
     if n not in visited: 
      visited.add(n) 

      # go recursively if the new node is green 
      if n in greens: 
       findNeighbors(n, greens, visited) 

    return visited 

greenNodes = set(new) 
twelve = findNodeByValue(12) 
result = findNeighbors(twelve, greenNodes) 
+0

Merci, Poke! Mais qu'entendez-vous par "pour n dans node.directNeighbors:" dans la fonction? – ccc

+1

Je suppose que n'importe quel noeud a une propriété 'directNeighbors' qui renvoie une liste de tous les voisins directs. Par exemple, pour le noeud '12', ce serait les nœuds' 15' et '21'. – poke