ハング電気2531彼を捕まえます

トピックへのリンク:http://acm.hdu.edu.cn/showproblem.php?pid=2531

溶液:ピットの主題は、2つの無実の開始時に、数Dであり、そうではない、Dの数は不明です。それでは、Dを見つけてみましょう、Dヘッドとしてそのようにして、うまく他のD Dの相対位置を記録する配列を使用して、BFSを判断します

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
CONSTの INT N = 1E3 + 7 チャーARR [N] [N]。
int型S1、E1、S2、E2;
INTのN、M。
int型のXX、YY。
int型のマーク[N] [N]。
INT bodyx [N]。
INT bodyy [N]。
int型のPOS。
int型の D [ 4 ] [ 2 ] = { 1001、 - 100、 - 1 }。
構造体STU {
    int型、B;
    int型の合計。
}。
int型ANS;
ブール裁判官(int型のx、int型のY){
     場合(マーク[X] [Y])戻り 0 もし(X < 0 || Y < 0 || X> = N || Y> = M)戻り 0 ;
    もし(ARR [X] [Y] == ' O '戻り 0 ;
    以下のためにint型 i = 0 ; iがPOSを<; iは++ ){
         int型 DX = bodyx [I] + X。
        int型 DY = bodyy [i]が+Y;
        もし(DX < 0 || DY < 0 || DX> = N || DY> = M || DX < 0 || DY < 0 || ARR [DX] [DY] == ' O '戻り 0 ; 
    } 
    リターン 1 
} 


ブールジュジュ(int型のx、int型Y){
     場合(ARR [X] [Y] == ' Q 'リターン 1 以下のためにint型 i = 0 ; iがPOSを<; iは++ ){
         int型 DX = X + bodyx [I];
        int型DY = Y + bodyy [I]。
        もし(ARR [DX] [DY] == ' Q 'リターン 1 
    } 
    戻り 0 
} 
ボイド BFS(int型 X1、int型のY){ 
    キュー <STU> QUE。
    que.push({X1、Y、0 })。
    マーク[X1] [Y] = 1 一方、(que.size()){ 
        STU X = )(que.front。
        que.pop(); 
        もし(ジュジュ(XA、XB)){ 
            ANS = x.sum。
            ブレーク; 
        } 
        のためにint型 i = 0 ; iは< 4 ; iは++ ){
             int型 DX = X.A + Dを[I] [ 0 ]。
            int型 DY = x.b + D [i]を[ 1 ]。
            もし(裁判官(DX、DY)){ 
                que.push({DX、DY、x.sum + 1 })。
                マーク[DX] [DYは] = 1 
            } 
        } 
    } 
} 
int型のmain(){
     一方(CIN >> N >> M){
         場合(N == 0 || Mの== 0破ります; 
        memsetの(マーク、0はsizeof (商標))。
        S1 = - 1 
        ANS = - 1 
        POS = 0 ;
        int型、I = 0のscanf(; iがN <I ++)は" %sの" 、[I] ARR)。
        int型 i = 0 ; iがN <I ++は{)
             のためのINT J = 0 ; J <Mであり、j ++ ){
                 場合 ==(ARR [I] [J] 'D '!&& S1 = - 1 ){ 
                    bodyx [POS] = I。
                    bodyy [POS ++] = J; 
                } 
                そう であれば(ARR [I] [J] == ' D ' ){ 
                    S1 = I、E1 = J。
                } 
            } 
        } 
        のためにint型 i = 0 ; iはPOSを<; iは++ ){ 
            bodyx [I] = bodyx [I] - S1。
            bodyy [I] = bodyy [I] - E1。
        } 
        BFS(S1、E1)。
        もし(ANS = - !1)coutの<< ANS << てendl;
        他の裁判所未満<< " インポッシブル" << てendl; 
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/Accepting/p/11596811.html