チャプターの検索技術hdu1312「赤と黒」BFS「高度へのエントリからアルゴリズムの競争」

#include <iostreamの> 
する#include <cstdioを> 
する#include <キュー>
 使用して 名前空間STD;
 チャールーム[ 25 ] [ 25 ];
 INT [DIR 。4 ] [ 2 ] = {{ - 10 }、{ 0、 - 1。 }、{ 10 }、{ 01 }};
 int型Wxを、Hyは、NUMの;
 // Wxを、Hyとの:境界線の長さと幅、NUM:タイルの初期総数からタイル到達する
の#defineに CHECKを(X 、Y)(X <&& WxをXの> = 0 && Y> = 0 && Y <Hyの) 
 // チェック境界か
構造体ノード
{ 
    int型のX、Y。
}。
ボイド BFS(INT DX、INT DY)
{ 
    キュー <ノード> Q。
    ノードの横、スタート。
    start.x = DX。
    start.y = DY。
    q.push(スタート)。// 把当前节点入队
    ながら(!q.empty())
    { 
        開始 = q.front()。
        q.pop(); 
        以下のためにINT iが= 0 ; I < 4 ; ++ I)
        { 
            next.x = start.x + DIR [I] [ 0 ]。 
            next.y = + start.y DIR [I] [ 1 ];
             IF(CHECK(next.x、next.y)&&ルーム[next.x] [next.y] == ' ' 
            { 
                ルーム[次に.X] [next.y] = ' ' ; // 現在のノードのタグがなくなった 
                NUM ++を; // ステップ数をインクリメント 
                q.push(次へ); // 子ノードエンキュー            } 
        } 
    } 
} int型メイン()
{ int型のX、Y、DX、Dyを; 
     // DX、Dyのヒト局一方(WxをのCIN >> のHy)


    
    
    {
        もし(Wxの== 0 && Hyの== 0 
        { 
            ブレーク
        } 
        のために(Y = 0 ; Y <Hyと; ++ Y)
        { 
            ための(X = 0 ; X <Wxを、++ X)
            { 
                CIN >> ルーム[X] [Y]。
                もし(部屋[X] [Y] == ' @ ' 
                { 
                    DX = X。
                    DY = Y。
                } 
            } 
        } 
        
        NUM =1 ; 
        BFS(DX、DY)。
        coutの << NUM << てendl; 
    } 
    戻り 0 
 }

 

おすすめ

転載: www.cnblogs.com/chrysanthemum/p/11823037.html