我正在尝试学习如何在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
循环语法:How does the Java 'for each' loop work?
更新:
阅读详细代码,虽然缺少Graph
的定义,但仍然可以肯定
回答的应该是合理的。
关于java - 深度优先搜索java实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53670410/