gpt4 book ai didi

java - 有向加权图的邻接表

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:51 28 4
gpt4 key购买 nike

我正在使用邻接表来表示有向加权图,并基于 this 提供的示例代码所以问题,我创建了以下内容:

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>>>
  1. 基本上我如何检查一个节点属于a的邻接表给定基节点?我觉得问题减少到正确迭代在adjacent Set<HashMap<String, Integer>>结构,还是我的推理有误?
  2. 在我的第二种方法中 adjacentNodes(String node)我是返回包含的链表的 map (在集合结构中)连接的节点及其距离。我如何才能有效地迭代以查看任何给定节点的所有连接?

最佳答案

我认为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();
}

关于java - 有向加权图的邻接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1990215/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com