エリアに囲まれて
問題解決のアイデア:再帰的深さ優先探索+ +逆思考
クラスソリューション{ 公共 ボイドが解決(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 )。 } } }