時間制限:
1000のミリ秒のメモリ制限:262144キロバイトの詳細な制限
1の#include <iostreamの> 2の#include <stdio.hの> 3の#include < 文字列・H> 4 使って 名前空間STDを、 5 INT XX [ 4 ] = { 0、0、 - 1、1 }。 6 INTの YY [ 4 ] = { 1、 - 1、0、0 }。 7 INT [ 10 ] [ 10 ]、VIS [ 10 ] [ 10 ]、E [ 6 ]。 8 int型 フラグ、D、N。 9 ボイド色(int型のx、int型の Y、INT COL) 10 { 11 VIS [X] [Y] = 1 。 12 のためには、(int型 i = 0 ; iは< 4 ; iは++ ) 13 { 14 INT NX = X + XX [i]は、NY = Y + YY [I]。 15 であれば(NX < 1 ||がnx> N || NY < 1 || NY> N || VIS [NX] [NY] == 1 ) 16 続けます。 17 VIS [NX] [NY] = 2 ; 18 であれば([NX] [NY] == COL) 19 色(NX、NY、COL)。 20 } 21 } 22 INT EVA(INT S) 23 { 24 int型の CNT = 0 。 25 のmemset(E、0、はsizeof (e)参照)。 26 のためには、(int型 i = 1 ; iがn = <; I ++ ) 27 のための(INT J = 1 ; J <= N; J ++ ) 28 であれば!(VIS [I] [J] = 1!&& E [I ] [J]) 29 E [I] [J] = 1、CNT ++ 。 30 リターン(CNT)。 31 } 32 ブール裁判官(INT COL) 33 { 34 のint TMP = 0 。 35 のためには、(int型 i = 1 ; iがn = <; I ++ ) 36 のための(INT J = 1 ; J <= N; J ++ ) 37 であれば([I] [J] == COL && VIS [I] [J] = = 2 ) 38 { 39 TMP ++ 。 40 色(I、J、COL)。 41 } 42 リターン(TMP> 0 )。 43 } 44 空隙検索(int型S) 45 { 46 INT TMP = EVA(S)、T [ 10 ] [ 10 ]。 47 であれば(TMPの== 0 ) 48 { 49 フラグ= 1 。 50 リターン; 51 } そう であれば(TMP + S> D) 52 リターン; 53 のための(int型 I = 0 ; iが= < 5、iが++ ) 54 { 55件 のmemcpy(T、VIS、はsizeof (T))。 56 であれば(裁判官(I)) 57 検索(S + 1 )。 58件 のmemcpy(VIS、T、はsizeof (VIS))。 59 であれば(フラグ) 60 リターン。 61 } 62 } 63 のint main()の 64 { 65 ながら(scanf関数(" %のD "、&N)!= EOF && N) 66 { 67 フラグ= 0 ;のmemset(VIS、0、はsizeof (VIS))。 68 のためには、(int型 i = 1 ; iがn = <I ++ ) 69 のための(INT J = 1 J ++; J <= N ) 70 CIN >> [I] [J]。 71 色(1、1、[ 1 ] [ 1 ])。 72 のために(D = 0 ; D> = 0 ; D ++ ) 73 { 74 検索(0 ); 75 であれば(フラグ) 76 { 77 COUT << D << ENDL。 78 ブレーク; 79 } 80 } 81 } 82 リターン 0 。 83 }