簡體   English   中英

Java實現鄰接表

[英]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 ,即在表示的圖中從頂點ij的權重為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.

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