[英]adjacency list of a directed weighted graph
我使用邻接列表来表示有向加权图,并根据此 SO问题提供的示例代码,我创建了以下内容:
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>>>
)? hashmap将保存已连接节点的名称及其距离:
Map<startNode, LinkedHashSet<HashMap<endNode, distanceToEndNode>>>
adjacent
Set<HashMap<String, Integer>>
结构上正确迭代,或者我的推理是错误的? adjacentNodes(String node)
我返回一个链表,其中包含连接节点的地图(以集合结构)及其距离。 我怎样才能有效地迭代以查看任何给定节点的所有连接? 我认为这里不需要LinkedHashSet
,你可以用Map<String, Map<String, Integer>>
表示图形。
isConnected
基本上就是你已有的:
public boolean isConnected(String node1, String node2) {
Map<String, Integer> adjacent = map.get(node1);
if(adjacent==null) {
return false;
}
return adjacent.containsKey(node2);
}
adjacentNodes
只需要拉出源节点的哈希集中的条目
public Collection<Map.Entry<String, Integer>> adjacentNodes(String node) {
Map<String, Integer> adjacent = map.get(node);
if(adjacent==null) {
return new ArrayList<Map.Entry<String, Integer>>();
}
return adjacent.entrySet();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.