J'utilise des listes de contiguïté pour représenter un graphe pondéré dirigé et en fonction du code exemple fourni par this SO question, je l'ai créé les éléments suivants:liste de contiguïté d'un graphe pondéré dirigé
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
public class _Graph {
private Map<String, LinkedHashSet<HashMap<String, Integer>>> map = new HashMap<String, LinkedHashSet<HashMap<String, Integer>>>();
public void addEdge(String node1, String node2, int dist) {
LinkedHashSet<HashMap<String, Integer>> adjacent = map.get(node1);
HashMap<String, Integer> innerMap = new HashMap<String, Integer>();
if(adjacent==null) {
adjacent = new LinkedHashSet<HashMap<String, Integer>>();
map.put(node1, adjacent);
}
innerMap.put(node2, dist);
adjacent.add(innerMap);
}
public boolean isConnected(String node1, String node2) {
Set<HashMap<String, Integer>> adjacent = map.get(node1);
if(adjacent==null) {
return false;
}
return adjacent.contains(node2);
}
public LinkedList<HashMap<String, Integer>> adjacentNodes(String node) {
LinkedHashSet<HashMap<String, Integer>> adjacent = map.get(node);
if(adjacent==null) {
return new LinkedList<HashMap<String, Integer>>();
}
return new LinkedList<HashMap<String, Integer>>(adjacent);
}
}
Je ne parviens pas à rendant la méthode isConnected
pour fonctionner correctement. Est-ce que j'utilise une mauvaise structure de données pour représenter le graphique ici (Map<String, LinkedHashSet<HashMap<String, Integer>>>
)? Le hashmap tiendra le nom du noeud connecté et la distance à elle:
Map<startNode, LinkedHashSet<HashMap<endNode, distanceToEndNode>>>
- Fondamentalement, comment puis-je vérifier si un nœud appartient à la liste de contiguïté d'un noeud de base donnée ? Je pense que le problème est réduit à itérativement correctement au cours de la structure
Set<HashMap<String, Integer>>
, ou est-ce que mon raisonnement est faux? - Dans ma deuxième méthode
adjacentNodes(String node)
Je suis retour une liste chaînée contenant les cartes (dans une structure de jeu) des noeuds connectés et leurs distances. Comment pourrais-je efficacement parcourir pour voir toutes les connexions d'un nœud donné?
Merci, dois-je changer adjacent.contains (node2); à adjacent.containsKey (node2); – denchr
Oui, vous avez raison. Fixé. –
L'initialisation de la carte dans ces deux fonctions donne une erreur: "incompatibilité de type: Impossible de convertir de LinkedHashSet> à la carte " –
user782400