我使用邻接表来表示有向加权图,并基于以下提供的示例代码this https://stackoverflow.com/questions/58306/graph-algorithm-to-find-all-connections-between-two-arbitrary-vertices/58446#58446所以问题,我创建了以下内容:
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);
}
}
我在制作时遇到困难isConnected
方法才能正常工作。我是否使用了错误的数据结构来表示此处的图表(Map<String, LinkedHashSet<HashMap<String, Integer>>>
)?哈希图将保存连接节点的名称及其距离:
Map<startNode, LinkedHashSet<HashMap<endNode, distanceToEndNode>>>
- 基本上我如何检查节点是否
属于a的邻接表
给定基节点?我认为问题是
减少到正确迭代
超过
adjacent
Set<HashMap<String, Integer>>
结构,还是我的推理错误?
- 在我的第二种方法中
adjacentNodes(String node)
我是
返回一个链表,其中包含
的地图(以集合结构)
连接的节点及其距离。如何有效地迭代以查看任何给定节点的所有连接?