leetcode(130)の領域に囲まれ

エリアに囲まれて

問題解決のアイデア:再帰的深さ優先探索+ +逆思考

クラスソリューション{
     公共 ボイドが解決(CHAR [] []基板){
         場合(board.length == 0 ||ボード[0] .LENGTH == 0 ){
             返します
        } 
        INT XLEN = board.length。
        INT YLEN =ボード[0 ] .LENGTH。
        ブール [] []フラグ= 新しい ブール[XLEN] [YLEN]。 
        int型私= 0 ;
        INT J ++; J <YLEN J = 0 ){
             場合(ボード[I] [J] == 'O' ){ 
                DFS(ボード、旗、XLEN、YLEN、I、J)。
            } 
        } 
        、I = XLEN-1 INT J ++; J <YLEN J = 0 ){
             場合(ボード[I] [J] == 'O' ){ 
                DFS(ボード、旗、XLEN、YLEN、I、J)。
            } 
        } 
        、I = 0 INTの J = 1; J <XLEN-1; J ++ ){
             場合(ボード[J] [I] == 'O' ){ 
                DFS(ボード、旗、XLEN、YLEN、J、I); 
            } 
        } 
        、I = YLEN-1 以下のためのint型 J = 1; J <XLEN-1; J ++ ){
            もし(ボード[J] [I] == 'O' ){ 
                DFS(ボード、旗、XLEN、YLEN、J、I); 
            } 
        } 
        のための(i = 1; iはXLEN-1 <; iは++ ){
             ためのint型、J = 1、J <YLEN-1; J ++ ){
                 場合(フラグ[I] [J] ==  &&ボード[I] [ J] == 'O' ){ 
                    ボード[I] [J] = 'X' 
                } 
            } 
        } 
    } 
    パブリック 静的 ボイド DFS(CHAR [] []ボード、ブール [] []フラグ、 INTINT XLEN、、y)は、YLEN、int型のx、int型のY){
         場合(X <0 || Y <0 || X || Y == XLEN == {YLEN)
             を返します
        } 
        場合(フラグが[X] [Y] == ){
             返します
        } 
        場合(ボード[X] [Y] == 'X'は){
             返します
        } 
        場合(ボード[X] [Y] == 'O' ){ 
            フラグ[X] [Y]は = 
            DFS(ボードは、フラグは、XLEN、YLENはx +1 、y)を、
            DFS(ボード、旗、XLEN、YLEN、X -1
            DFS(ボード、旗、XLEN、YLEN、X、Y1 ); 
            DFS(ボード、旗、XLEN、YLEN、X、Y -1 )。
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/erdanyang/p/11128050.html