gpt4 book ai didi

java - 深度优先搜索java实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:13 25 4
gpt4 key购买 nike

我正在尝试学习如何将图形(深度优先搜索)实现到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com