隣接リストを使用して有向加重グラフを表し、この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>>>
)?ハッシュマップは、接続されたノードの名前とノードまでの距離を保持します。
Map<startNode, LinkedHashSet<HashMap<endNode, distanceToEndNode>>>
- 基本的に、ノードが特定のベースノードの隣接リストに属しているかどうかを確認するにはどうすればよいですか?問題は構造を適切に反復することに帰着すると思いますか
adjacent
Set<HashMap<String, Integer>>
、それとも私の推論は間違っていますか? - 2番目の方法
adjacentNodes(String node)
では、接続されたノードとその距離のマップ(セット構造)を含むリンクリストを返します。特定のノードのすべての接続を効率的に反復処理するにはどうすればよいですか?