簡體   English   中英

遍歷二維Java數組

[英]Iterating over bidimensional Java arrays

public static List<Vertex<Integer>> petersenGraph() {
    List<Vertex<Integer>> v = new ArrayList<Vertex<Integer>>();

    for (int i = 0; i < 10; i++) {
        v.add(new Vertex<Integer>(i));
    }

    int[][] edges =
    {{0,1}, {1,0}, {1,2}, {2,1}, {2,3}, {3,2}, {3,4}, {4,3}, {4,0}, {0,4},
    {5,6}, {6,5}, {6,7}, {7,6}, {7,8}, {8,7}, {8,9}, {9,8}, {9,5}, {5,9},
    {5,0}, {0,5}, {6,2}, {2,6}, {7,4}, {4,7}, {8,1}, {1,8}, {9,3}, {3,9}};

    for (int[] e : edges)
        v.get(e[0]).successors().add(v.get(e[1]));

    return v;
}

我了解一切,直到有迭代的邊緣為止。 到底發生了什么事?

編輯:為什么使用e[0]e[1]訪問它們? e[0]是第一個數字, e[1]是第二個數字嗎?

啊,丑陋。

edge是一個二維數組,因此它是一個int數組。 在實際定義中,它是成對的數組。

(int [] e:​​edge)的行僅表示在每次迭代中,e將變為不同的int數組,因此在每次迭代中,它都是不同的對。

然后,e [0]代表該對中的第一個項目,e [1]代表另一個。 因此,第一個坐標用於查找頂點,然后發生某些情況,第二個坐標被添加進來。在不了解頂點或不知道算法的情況下,尚不清楚。

多維數組edges實際上是“數組數組”。 所述for語句中提取從一個元件edges的時間,和中的每個元素edgesint[]

因此,第一次通過循環,e將為{0, 1} 第二次是{1, 0} 第三次是{1, 2} 等等。

它正在創建的圖形上的Wikipedia頁面是http://en.wikipedia.org/wiki/Petersen_graph

從它的外觀,圖中的邊緣被Vertex.successors集合所表示,並且邊緣陣列被用於構造圖,使用第一索引作為節點和所述第二索引作為每個邊緣節點。

這也將解釋為什么每對后面都跟着相反的對,例如{0,1},{1,0},因為彼得森圖是無向的,所以節點之間的連接必須在兩個方向上表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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