羅区p3956 [チェス盤]

毎日ブログ(✧◡✧)

[リンク]ボードのトピック

アルゴリズム:

そして、これは普遍セット2017です。


 

。最初の色処理に:C [I] [J] =う色+ 1を、 そう無色= 0、=赤1、2 =黄色、

そして、メモリの事実は、(私の最初の注文0x3f3f3f3f)の大規模な数に初期化される最初の配列への答えを覚えているだろう。

。SECOND、 DFS主な部品:

1. 4つの変数:

X、Yは、検索地点を記憶します。

numが現在の支出を保存します

今まで使用魔法を格納するために使用されます。

2.いくつかの境界線のリターン

。①は、ときにマップのうち、返します。

。②(また、同一でない場合は、繰り返し見出さ繰り返し、同じを含む)は、優れたより劣っ前検索に検索の現在の値は、返さ。

③。ときに最も右下(M、M)、最初の値を決定するために、検索(実際には、私は足ああプロのテストをキャッチqwq判断してはいけないではない)、現在の値が前回の検索が早い②の現在の値よりも優れているにも優れていない場合ので、それはリターンとなります。

だから我々は、再帰的な決意を入力することができれば、ある種のより好ましくは、以下の直接更新等。

3.真の主な部品:

四方1.検索(メディアに幅広い検索のようなものです)

色の展開後のノードは、その後、色判定は、ノードを展開し、現在のノードが同じである場合

同じ言葉、コストを増加させる必要がなく、直接DFS(XX、YY、NUM、0);

異なる場合は、それが1、DFS(XX、YY、NUM + 1,0)を追加する必要がかかります。

あなたは何色、それはマジックポイントを使用した場合、現在のノードは、魔法を使用していないと判断されていないしているノードを展開した場合、明らかにノードはなり展開し、魔法を使用しない場合、Infoprogrammeエネルギーを使用し、他の場所に行きます現在のノード、DFSと同じ色に(XX、YY、NUM + 2,1)。

最後に、バックを忘れないでください:[XX] [YY] = 0 Cを。

判決がない解決策:

DFSはない溶液、又は溶液、出力ANSがないことを示す、ANS = 0x3f3f3f3f終了場合ノー溶液場合、値は、0x3f3f3f3fためANSを更新しないであろう。

コード:

#include <ビット/ STDC ++ H> 使用して名前空間STDを、
インラインint型リード(){
     int型 ANS = 0 チャー最後= ' '、CH = GETCHAR()。
    一方、(CH> ' 9 ' || CH < ' 0 ')最後= CH、CH = GETCHAR()。
    一方、(CH> = ' 0 ' && CH <= ' 9 ')ANS =(ANS << 1)+(ANS << 3)+ CH- ' 0 'CH = GETCHAR()。
    もし

 
 (最後== ' - ')ANS = - 年。
    返す歳; 
} 

のInt M、N。
int型の C [ 101 ] [ 101 ] [ 101 ] [ 101 ]。
INT年= 0x3f3f3f3f INT DX [ 5 ] = { 01、 - 100 }。
int型 DY [ 5 ] = { 0001、 - 1 }。

空隙DFS(int型のx、int型 Y、INT NUM、INT 使用){
     場合(X < 1つの || Y < 1つの || Y> M || X> M)のリターン;
    もし(NUM> = [X] [Y])のリターン; 
    [X] [Y] = NUM。
    もし(x == M && Y == M){ 
        ANS = NUM。
        返します
    } 
    のためにint型 i = 1 ; iは= < 4 ; iは++ ){
         int型 XX = X + DX [i]は、YY = Y +のDYの【をI]。
        もし(C [XX] [YY]){ // 色を有する
            場合(C [XX] [YY] == C [X] [Y])DFS(XX、YY、NUM、0 );
            他の DFS(XX、YY、NUM + 10 ); 
        } 
        {
             場合(!使用){ 
                C [XX] [YY] = C [X] [Y]。
                DFS(XX、YY、NUM + 21 )。
                C [XX] [yyは] = 0 ; 
            } 
        } 
    } 
} 

int型のmain(){ 
    memsetの(、63はsizeof(A))。
    M =読み取る(); N = )(読み取ります。
    INT X、Y、色。
    int型 i = 1 ; iが<= N iが++ ){ 
        X = read()は、yが読み取ら=();色= 読み取ります()。
        C [X] [Y]は色+ = 1// ない色:0
         // 赤色:1つの黄色:2 
    } 
    DFS(1100 );
    もし(ANS == 0x3f3f3f3f)のprintf(" -1 " );
    のprintf("%のD " 、ANS);
     戻り 0 ; 
}

終わり-

おすすめ

転載: www.cnblogs.com/zhuier-xquan/p/11114707.html