Перебор двумерных массивов Java - PullRequest
2 голосов
/ 28 января 2009
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;
}

Я все понимаю до того момента, когда есть итерация по краям. Что именно там происходит?

edit: почему к ним обращаются с помощью e[0] и e[1]? e[0] первое число и e[1] второе?

Ответы [ 3 ]

1 голос
/ 28 января 2009

Argh, это некрасиво.

edge - это двумерный массив, то есть массив массивов int. В фактическом определении это массив пар.

Строка для (int [] e: edge) просто означает, что в каждой итерации e станет различным массивом целых чисел, поэтому в каждой итерации это будет другая пара.

Тогда e [0] представляет первый элемент в паре, а e [1] представляет другой. Таким образом, первая координата используется для поиска вершины, а затем что-то происходит, и вторая координата добавляется. Не видя вершины или не зная алгоритм, это неясно.

0 голосов
/ 28 января 2009

Страница википедии на графике, которую она создает, - http://en.wikipedia.org/wiki/Petersen_graph.

На первый взгляд, ребра в графе представлены коллекцией Vertex.successors, а массив ребер используется для построения графа, используя первый индекс как из * Узел 1007 * и второй индекс как узел от до для каждого ребра.

Это также объясняет, почему за каждой парой следует противоположная, например, {0,1}, {1,0}, поскольку граф Петерсона является ненаправленным, поэтому соединения между узлами должны быть представлены в обоих направлениях.

0 голосов
/ 28 января 2009

Многомерный массив edges фактически является «массивом массивов». Оператор for извлекает один элемент из edges за раз, и каждый элемент edges является int[].

Итак, в первый раз в цикле е будет {0, 1}. Во второй раз это будет {1, 0}. В третий раз это будет {1, 2}. И так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...