DepthFirstSearch java implementation



我正在尝试学习如何在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");
}
}

尽管您刚刚发布了部分代码,但我认为w代表与当前节点v相邻的每个节点。或者我们可以说w代表G.adj(v)中的每个元素,它应该是arrayList或类似的东西。

请参阅此处的foreach循环语法:Java';对于每个';循环工作?

更新:

阅读详细的代码,虽然没有Graph的定义,但仍然可以确定答案应该是合理的。

示例中的for循环是foreach循环。G.adj(v)很可能会返回一些集合。W表示集合中的每个单个元素。对该集合中的每个元素W执行一些操作。

最新更新