список смежности ориентированного взвешенного графа
Я использую списки смежности для представления ориентированного взвешенного графа и на основе примера кода, предоставленногоэтот ТАК вопрос, я создал следующее:
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 map = new HashMap();
public void addEdge(String node1, String node2, int dist) {
LinkedHashSet adjacent = map.get(node1);
HashMap innerMap = new HashMap();
if(adjacent==null) {
adjacent = new LinkedHashSet();
map.put(node1, adjacent);
}
innerMap.put(node2, dist);
adjacent.add(innerMap);
}
public boolean isConnected(String node1, String node2) {
Set adjacent = map.get(node1);
if(adjacent==null) {
return false;
}
return adjacent.contains(node2);
}
public LinkedList adjacentNodes(String node) {
LinkedHashSet adjacent = map.get(node);
if(adjacent==null) {
return new LinkedList();
}
return new LinkedList(adjacent);
}
}
У меня проблемы с созданиемisConnected
метод для правильной работы. Я использую неправильную структуру данных для представления графика здесь (Map
)? Хэш-карта будет содержать имя подключенного узла и расстояние до него:
Map
В основном, как я могу проверить, принадлежит ли узел списку смежности данного базового узла? Я думаю, что проблема сводится к правильной итерации поadjacent
Set
структура, или мои рассуждения неверны?В моем втором методеadjacentNodes(String node)
Я возвращаю связанный список, содержащий карты (в заданной структуре) связанных узлов и их расстояния. Как я мог эффективно выполнить итерацию, чтобы увидеть все соединения какого-либо узла?