JZOJ 3422 [NOIP2013シミュレーション]アクアダンス

時間制限: 1000のミリ秒のメモリ制限:262144キロバイトの詳細な制限 

説明

アクアは、誕生日の贈り物として格子状のカラフルカーペットされており、より具体的には、グリッド上のカーペットの色が殺到して変更することができます。

彼女のアイドル虹猫を喜ばせるためには、アクアは~~~孟を販売するためにカーペットの上に光のダンスを踊ることにしました

チェック柄のカーペットが代わってN行N列、5から0までの数と各グリッドを持っていてカラー。

アクアは、5から0の間の色を選択し、優しくステップを打つことができ、中国聯通は、グリッドは、彼女が選択したすべてのその色になり、グリッド内のカーペットの左上隅をブロックします。2つのセルの共通のエッジ、及び同じ色:ここで、通信は次のように定義されています。

アクアはキャストされているのでダンスをかわす、あまりにも多くの腹立たしいを消費しないようにするために、彼女は少なくともすべてのグリッドの色が同じになる配置するために、どのように多くの手順を知りたいと思いました。

入力

各テストサイトでは、データの複数のセットが含まれています。

各データセットの最初の行は、整数N、N行N列のグリッド上の失速です。

次に、N * N行列の数の各々は、マトリックスは、0と5との間に、各グリッドの色です。

N = 0は、入力の終了を表します。

出力

各試験のために、出力整数、ステップの最小数を表します。

サンプル入力

2 
0 0 
0 0
3
0 1 2
1 1 2
2 2 1
0

サンプル出力

0 
3

データ制約

データの30%、N <= 5

データの50%、N <= 6

、データの70%が、N <= 7

データの100%、N <= 8、試験群あたり20以下データ。
1の#include <iostreamの>
 2の#include <stdio.hの>
 3の#include < 文字列・H>
 4  使って 名前空間STDを、
5  INT     XX [ 4 ] = { 00、 - 11 }。
6  INTの     YY [ 4 ] = { 1、 - 100 }。
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          色(11、[ 1 ] [ 1 ])。
72          のために(D = 0 ; D> = 0 ; D ++ 73          {
 74             検索(0 );
75              であれば(フラグ)
 76              {
 77                  COUT << D << ENDL。
78                  ブレーク;
79              }
 80          }
 81      }
 82      リターン 0 83 }

おすすめ

転載: www.cnblogs.com/anbujingying/p/11297589.html