-1

所以我有一个 2darray 的颜色。颜色由数字表示。我制作了一个 dfs,目前只检查数字 1,它是红色的。我不认为我的代码正确。我有一个获取邻居,它确实在它所在的节点周围获取邻居并将它们添加到列表中。board 是整数数组,如果节点已被访问,visited 是一个 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;

我不确定如何使用获取邻居正确遍历到下一个红色。

4

1 回答 1

1

DFS您离开时标记已探索的子节点。从维基百科查看这个伪代码:

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)

请注意,您不会检查父母是否被访问。你检查孩子。

于 2014-03-19T02:35:14.227 回答