Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DepthFirstSearchJava实现_Java_Algorithm_Undirected Graph - Fatal编程技术网

DepthFirstSearchJava实现

DepthFirstSearchJava实现,java,algorithm,undirected-graph,Java,Algorithm,Undirected Graph,我试图学习如何在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”是什么意思 谢谢 编辑:

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

}
包edu.princeton.cs.algs4;
公共类DepthFirstSearch{
私有布尔值[]已标记;//已标记[v]=是否存在s-v路径?
private int count;//连接到的顶点数
公共深度优先搜索(图G,int s){
标记=新布尔值[G.V()];
Evertex(s);;
dfs(G,s);
}
私有void dfs(图G,int v){
计数++;
标记为[v]=真;
对于(整数w:G.adj(v)){
如果(!标记为[w]){
dfs(G,w);
}
}
}
公共布尔标记(int v){
Evertex(v);
返回标记为[v];
}
公共整数计数(){
返回计数;
}
私用Evertex(int v){
int V=标记的长度;
如果(v<0 | | v>=v)
抛出新的IllegalArgumentException(“顶点”+v+”不在0和“+(v-1)”之间);
}
公共静态void main(字符串[]args){
In=新In(args[0]);
图G=新图(in);
ints=Integer.parseInt(args[1]);
DepthFirstSearch=新的DepthFirstSearch(G,s);
对于(int v=0;v
示例中的for循环是一个
foreach
循环
G.adj(v)
很可能返回一些集合
W
表示集合中的每个元素。对于该集合中的每个元素
W
做点什么。

虽然您刚刚发布了部分代码,但我相信
W
代表与当前节点
v
相邻的每个节点。或者我们可以说,
w
代表
G.adj(v)
中的每个元素,它应该是一个数组列表或类似的东西

请参见此处的
foreach
循环语法:

更新:

阅读详细的代码,尽管缺少
图形的定义,但仍然确定

回答应该是合理的。

可能重复的
w
是关于在图形上添加一个边。我刚刚编辑了代码,我发布了完整的代码,这可能会帮助您澄清这是什么。谢谢你发送的链接,我会查看更多细节。