-1

だから私は色の2次元配列を持っています。色は数字で表されます。現在、赤の番号1のみをチェックするdfsを作成しました。コードが正しいとは思いません。私は、それがあるノードの周りの隣人を取得し、それらをリストに追加する get neighbors を持っています。ボードは 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;

get neighbors を使用して次の赤に適切にトラバースする方法がわかりません。

4

1 に答える 1

1

DFS子ノードを LEAVE するときに探索済みとしてマークします。ウィキペディアからこの擬似コードを確認してください。

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 に答える