簡體   English   中英

有向加權圖的鄰接表

[英]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>>>
  1. 基本上我如何檢查節點是否屬於給定基節點的鄰接列表? 我認為問題減少到在adjacent Set<HashMap<String, Integer>>結構上正確迭代,或者我的推理是錯誤的?
  2. 在我的第二個方法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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM