[ヒント]並べ替えるときは覚えておいたほうがいい


1.以前にアクセスした座標がDFSを超える
  • 一方向を向くには
  • を用いる.
    static boolean dfs(int y, int x, int by, int bx, char alp) {
    
            if (visited[y][x]) return true;
    		// visit을 여기서 계산
            visited[y][x] = true;
    
            for (int k = 0; k < 4; ++k) {
                int ny = y + dy[k];
                int nx = x + dx[k];
                if (!(0 <= ny && ny < n && 0 <= nx && nx < m)) continue;
                if (a[ny][nx] != alp) continue;
                //  이부분!
                //  bx by 는 before이다.
                if (ny == by && nx == bx) continue;
    
                if(dfs(ny, nx, y, x, alp))
                    return true;
            }
            return false;
        }
    2.2 D配列の位置を数値で表す
    ex 2*3配列の場合
    0,1 -> 1
    1,2 -> 5
    表示方法
    3.ArrayList 2 D配列
    難易度の高い問題でよく使われます.
    初期化を忘れないで
    sArrayList<class>[][] chips;