Java-реализация DepthFirstSearch - PullRequest
       21

Java-реализация DepthFirstSearch

0 голосов
/ 07 декабря 2018

Я пытаюсь узнать, как реализовать графики (поиск в глубину) в Java.И вот фрагмент кода, который я не понимаю, что символ здесь означает.Речь идет об этом куске кода:

    private void dfs(Graph G, int v) {
    count++;
    marked[v] = true;
    for (int w : G.adj(v)) {
        if (!marked[w]) {
            dfs(G, w);
        }
    }
}

Я не понимаю, что такое "w" ?!

Спасибо.

РЕДАКТИРОВАТЬ: Вот полный код, может быть, это поможет вам узнать больше, что происходит здесь:

package edu.princeton.cs.algs4;

public class DepthFirstSearch {
    private boolean[] marked;    // marked[v] = is there an s-v path?
    private int count;           // number of vertices connected to s


    public DepthFirstSearch(Graph G, int s) {
        marked = new boolean[G.V()];
        validateVertex(s);
        dfs(G, s);
    }


    private void dfs(Graph G, int v) {
        count++;
        marked[v] = true;
        for (int w : G.adj(v)) {
            if (!marked[w]) {
                dfs(G, w);
            }
        }
    }


    public boolean marked(int v) {
        validateVertex(v);
        return marked[v];
    }


    public int count() {
        return count;
    }


    private void validateVertex(int v) {
        int V = marked.length;
        if (v < 0 || v >= V)
            throw new IllegalArgumentException("vertex " + v + " is not between 0 and " + (V-1));
    }


    public static void main(String[] args) {
        In in = new In(args[0]);
        Graph G = new Graph(in);
        int s = Integer.parseInt(args[1]);
        DepthFirstSearch search = new DepthFirstSearch(G, s);
        for (int v = 0; v < G.V(); v++) {
            if (search.marked(v))
                StdOut.print(v + " ");
        }

        StdOut.println();
        if (search.count() != G.V()) StdOut.println("NOT connected");
        else                         StdOut.println("connected");
    }

}

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Хотя вы только что опубликовали часть своего кода, я считаю, что w обозначает каждый узел, который находится рядом с текущим узлом v.Или мы можем сказать, что w обозначает каждый элемент в G.adj(v), который должен быть arrayList или что-то в этом роде.

См. foreach грамматику цикла здесь: Как работает Java «для каждого» цикла?

Обновления:

Прочитайте подробный код,хотя отсутствие определения Graph, все же уверен, что ответ должен быть разумным.

0 голосов
/ 07 декабря 2018

Цикл for в вашем примере - это цикл foreach.G.adj(v) скорее всего возвращает какую-то коллекцию.W представляет каждый отдельный элемент в коллекции.Для каждого элемента W в этой коллекции сделайте что-нибудь.

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