2019年6月1日
17時54分51秒
ちょっと待って!!
トピックリンク:
http://bailian.openjudge.cn/practice/2815
#include <ビット/ STDC ++ H.> 使用して 名前空間STD; INT N- = 0、M = 0 ; int型 roomNumber = 0 ; int型 ROOMSIZE = 0 ; // 現在の部屋の面積の大きさ INT maxRoomSize = 0 ; int型ルーム[ 100 ] [ 100 ]; int型カラー[ 100 ] [ 100 ]; ボイド DFS(int型 X、INT Y); int型のmain() { scanfの(" %D%D"&N、& M) のための(int型 I = 0 iがN <; Iは++ ) { ため(INT J = 0 ; J <Mであり、j ++ ) { scanf関数(" %のD "、&ルーム[I] [J ]); } } のために(int型 i = 0 ; iがn <; iは++ ) { ための(int型 J = 0 ; J <Mであり、j ++ ) { 場合(色[I] [J] == 0 ) { roomNumber } ++ ; ROOMSIZE = 0 ; DFS(i、j)は、 maxRoomSize = MAX(maxRoomSize、ROOMSIZE)。 } } } COUT << roomNumber << ENDL。 coutの << maxRoomSize << てendl; リターン 0 ; } ボイド DFS(int型のx、int型のY) { 場合(色[X] [Y] =!0 ) { 返します。 ROOMSIZE ++; 色[X] [Y] = roomNumber。 もし((部屋[X] [Y]&1)== 0 ) DFS(X、Y - 1)。 // 向西走 場合((部屋[X] [Y] - 2)== 0 ) DFS(X - 1、Y); // 向北走 場合((部屋[X] [Y]&4)== 0 ) DFS(X、Y + 1)。 // 向东走 場合((部屋[X] [Y]&8)== 0 +) DFS(X 1、Y); // 南 }