[英]Vertex representation of a weighted unidirectional graph
我正在使用鄰接矩陣來表示我的加權單向大圖的所有頂點。 在此圖中,沒有邊將頂點連接到自身。 這使得我的鄰接矩陣的所有對角線元素為null
。 由於我的圖很大,所以在鄰接矩陣中我不需要在左三角形中保存任何元素。 下面是一個帶有鄰接矩陣的小樣本圖。
在單向圖中,左三角形只是直角三角形的鏡像。 即adjacency_matrix[i][j]
, adjacency_matrix[j][i]
是一樣的。 那么為什么要存儲左三角形。 對於一個大圖,這個技巧可以節省這么多 memory。同時對角線元素也為零,因為沒有邊將頂點連接到自身。 即adjacency_matrix[i][i]
為零。 但是我該如何實現呢? 這里可以使用二維數組嗎?
Java 並沒有真正的 2D arrays,盡管有用於分配 arrays 數組的語法糖。
你可能只想:
int[][] weight = new int[N][];
for (int i = 0; i < N; i++) weight[i] = new int[N-1-i];
這將分配你想要的三角形。 然后只索引行 r,col c at weight[r][cr-1]。
另一種選擇是只使用一個數組
int[] weight = new int[N*(N-1)/2];
索引計算起來可能有點復雜,但分配和指針開銷更少。
您可以使用鋸齒狀數組。
int[][] matrix = new int[N][];
for (int i = 1; i <= N; i++) {
matrix[i] = new int[N - i + 1];
for (int j = 1; j <= N - i + 1; j++)
matrix[i][j] = edgeValue;
}
基本上,您根據需要為每一行分配。
PS 也許我在這里搞砸了一些界限,但你仍然應該明白要點:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.