我嘗試了以下方法,但我不確定它是否正確。
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public static ArrayList<ArrayList<Integer>> incidentEdges(int v) {
for(int i = 0; i < a.length; i ) {
for(int j = 0; j < a[i].length; j ) {
if(a[v][j] == 1) {
list.get(v).get(new Edge(start, destination));
list.get(j).get(new Edge(start, destination);
}
}
}
return list;
}
陣列a是一個鄰接矩陣,引數v是一個無向圖的頂點。如果頂點v和j之間有一條邊,那么我們將這條邊添加到頂點v。
uj5u.com熱心網友回復:
方法一:查詢鄰接矩陣
由于您已經將邊存盤在鄰接矩陣中,因此您可以簡單地查詢它。將您的設定i為 v (因為您甚至沒有i首先使用),然后檢查所有連接的頂點。
public static ArrayList<Integer> incidentEdges(int v) {
ArrayList<Integer> result = new ArrayList<>();
for(int i = 0; i < a[v].length; i ) {
if(a[v][i] == 1) {
result.add(a[v].get(i));
}
}
return result;
}
方法二:生成鄰接表
如果你控制了輸入(即在制作鄰接矩陣之前),你想要的是一個鄰接串列:每個都list[start]指向一個ArrayList<Integer>(代表連接的頂點)。我會避免使用,ArrayList因為頂點的數量是已知的。所以我會改為使用ArrayList<Integer>[] list。這無疑使編碼更容易。
這是從鄰接矩陣生成鄰接串列的示例
static ArrayList<Integer>[] list;
public static ArrayList<Integer>[] generateAl(int v) {
list = new ArrayList[a.length];
for(int i = 0; i < a.length; i ) {
list[i] = new ArrayList<>();
for(int j = 0; j < a[i].length; j ) {
if(a[i][j] == 1) {
list[i].add(j);
}
}
}
return list;
}
public static ArrayList<Integer> incidentEdges(int v) {
return list[v];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471199.html
