Java DFS不是';t在二维阵列上工作

Java DFS不是';t在二维阵列上工作,java,arrays,depth-first-search,neighbours,Java,Arrays,Depth First Search,Neighbours,所以我有一系列的颜色。颜色由数字表示。我做了一个dfs,目前只检查数字1,它是红色的。我不知道;我不认为我的密码是对的。我有一个get neights,它可以获取节点周围的邻居,并将它们添加到列表中。电路板是INT数组,如果节点已被访问,则访问的是true或false数组。这是我的dfs: private int dfs(int startRow, int startCol, int[][]boards, boolean[][] visitedd){ int f; int t;

所以我有一系列的颜色。颜色由数字表示。我做了一个dfs,目前只检查数字1,它是红色的。我不知道;我不认为我的密码是对的。我有一个get neights,它可以获取节点周围的邻居,并将它们添加到列表中。电路板是INT数组,如果节点已被访问,则访问的是true或false数组。这是我的dfs:

private int dfs(int startRow, int startCol, int[][]boards, boolean[][] visitedd){
    int f;
    int t;
    visitedd[startRow][startCol] = true;
    for(; startRow < q; startRow++){
        for(; startCol < q; startCol++){
            if(boards[startRow][startCol] == 1 && visitedd[startRow][startCol] == false){
                g+=1;
                f = startRow;
                t = startCol;
                dfs(f, t, boards, visitedd);
            }
        }
    }
    return g;
private int-dfs(int-startRow、int-startCol、int[]]boards、boolean[]]visitedd){
int f;
int t;
visited[startRow][startCol]=真;
对于(;startRow

我不知道如何使用“获取邻居”正确遍历到下一个红色节点。

DFS
中,您在离开子节点时将其标记为已探索。请从Wikipedia查看此伪代码:

procedure DFS(G,v):
  label v as discovered
  for all edges from v to w in G.adjacentEdges(v) do
    if vertex w is not labeled as discovered then
      recursively call DFS(G,w)

请注意,您没有检查访问的父级。您检查子级。

初始化的
q
在哪里?还有,为什么它不工作?它实际上在做什么?q是电路板的大小。在这种情况下,电路板是4,但它可以更改。我希望此dfs使用GetNeights来查找下一个红色,并说明它是否继续美国线到另一点。就像有一块板是[1231[1231][1111]它将跟随所有的一个,如果它继续,它将返回并计算它们。但我不知道如何做。对不起,我不确定我是否完全理解我有一个邻居列表,但我不确定如何使用该列表遍历到下一个有效的邻居。好的,这修复了它始终返回true的问题。但它从未移动过列表中的第一行数组。这是因为您没有输入if逻辑,因为您将该值设置为
true
不检查父对象是否被访问,检查子对象是否被访问。我该怎么做呢?我有一个GetNeights,它创建了一个邻居列表。但我不确定如何检查列表中的那些邻居。@user2835532获取邻居并遍历它们,检查访问矩阵,查看它们是否被访问,如果未被访问,则递归调用邻居节点上的DFS。好的,因此在我的if语句中,我将调用GetNeights。使用for each循环检查它们是否为正确类型的节点,以及它们是否未被访问,然后调用该邻居上的DFS?