2
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]最初の番号と2番目の番号e[1]ですか。

4

3 に答える 3

1

ああ、それは醜いです。

エッジは2次元配列であるため、int配列の配列です。実際の定義では、これはペアの配列です。

(int [] e:​​edges)の行は、各反復でeが異なるintの配列になることを意味するため、各反復で異なるペアになります。

次に、e [0]はペアの最初のアイテムを表し、e[1]は他のアイテムを表します。したがって、最初の座標を使用して頂点を検索し、次に何かが発生して2番目の座標が追加されます。頂点を見たりアルゴリズムを知らなかったりすると、不明確になります。

于 2009-01-28T02:01:11.450 に答える
0

多次元配列edgesは事実上、「配列の配列」です。ステートメントは一度に から 1 つのfor要素を抽出edgesしており、 の各要素はedgesですint[]

したがって、ループを初めて通過すると、 e になります{0, 1}。2回目になります{1, 0}。3回目になります{1, 2}。等々。

于 2009-01-28T01:56:56.920 に答える
0

作成中のグラフのウィキペディア ページはhttp://en.wikipedia.org/wiki/Petersen_graphです。

これを見ると、グラフのエッジは Vertex.successors コレクションによって表され、edge配列を使用してグラフが作成されます。最初のインデックスを各エッジのfromノードとして使用し、2 番目のインデックスをtoノードとして使用します。

これは、Peterson グラフが無向であるため、各ペアの後に {0,1}、{1,0} などの反対が続く理由も説明するため、ノード間の接続は両方向で表す必要があります。

于 2009-01-28T17:30:10.407 に答える