[英]Java implementation of adjacency list
我有一個* m矩陣,每個節點處都有整數值,並且它是無向圖。 我要為此建立鄰接表。 我怎么做? 任何幫助深表感謝。
這是一個創建鄰接表的簡單實現。
將有n個鏈表,每個鏈表的大小可變。
首先初始化一個由整數組成的鏈表的ArrayList:
ArrayList<LinkedList<Integer>> adj_list = new ArrayList<LinkedList<Integer>>();
然后只需重復以下代碼即可添加鏈接列表:
adj_list.add(new LinkedList<Integer>());
如果使用它來表示圖形,則鏈表的數量=頂點數。因此,您必須重復上述第n行(頂點數)次。
現在說您要在第一個鏈接列表中添加數字3、4、5。執行以下操作:
adj_list.get(0).add(3);
adj_list.get(0).add(4);
adj_list.get(0).add(5);
這僅表示您的圖形中存在一個從頂點0到3,4,5的邊。
首先,您的描述似乎是一個鄰接矩陣,只是您說的是m
by n
。 鄰接矩陣始終是正方形,因此我們必須假設m==n
。 矩陣元素是邊緣權重。
的圖表的鄰接表表示(通常)的陣列adj
的套對。 集合adj[i]
包含對<j, w>
如果存在有向邊i--w-->j
,即在表示的圖中從頂點i
到j
的權重為w
。
有了這個定義,很明顯,您必須從n
空鄰接集adj[i]
,然后遍歷矩陣元素m[i][j] = w
。 對於每個這些,將<j, w>
添加到adj[i]
。
用於此的Java代碼非常簡單,因此我不會編寫它。 用鄰接表表示的圖的類型類似於ArrayList<HashMap<Integer, Integer>> adjacencies
。 <j,w> in adj[i]
中的對<j,w> in adj[i]
是存儲在哈希表adjacencies.get(i)
中的映射j -> w
。 創建這種鄰接關系的代碼將是adjacencies.get(i).put(j, w)
。
該方法允許您通過迭代哈希表adjacencies.get(i)
中的鍵來迭代與i
相鄰的頂點,使用w = adjacencies.get(i).get(j)
adjacencies.get(i)
查找給定邊i--w-->j
的權重。 w = adjacencies.get(i).get(j)
,以此類推,用於所有常用的圖形操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.