オイル預金(DFS)

GeoSurvComp地質調査会社は、地下の石油鉱床を検出するための責任があります。GeoSurvCompは、一度に土地の一つの大きな矩形領域で動作し、そして多数の正方形のプロットに土地を分割するグリッドを作成します。次にプロットは油が含まれているか否かを決定するために感知装置を使用して、個別に各プロットを分析します。油を含むプロットは、ポケットと呼ばれています。2つのポケットが隣接している場合、それらは同じ石油鉱床の一部です。石油鉱床は非常に大きくすることができ、多数のポケットが含まれていてもよいです。あなたの仕事は、石油鉱床がグリッドに含まれているどのように多くの異なった決定することです。 

InputThe入力ファイルは、1つの以上のグリッドが含まれています。各グリッドは、単一のスペースで区切られたmおよびnは、グリッド内の行と列の数を含む行から始まります。M = 0、入力の終了を知らせる場合。そうでない場合は、1 <= M <= 100、1 <= N <= 100この後、各(行末文字をカウントしない)n文字のm本のラインです。各文字は1つのプロットに対応し、いずれかの`*「で、油の不在を表す、または` @」、オイルポケットを表します。 
各グリッドOutputFor、出力の異なる油沈着の数。彼らは水平、垂直、または斜めに隣接している場合、2つの異なるポケットが同じ石油鉱床の一部です。石油鉱床は100個の以上のポケットを含んでいます。 
サンプル入力

1 1 
* 
3 5 
* @ * @ * 
** @ ** 
* @ * @ * 
1 8 
@@ **** @ * 
5 
**** @ 
* @@ * @ 
* @ ** @ 
@@@ * @ 
@@ ** @ 
0 0

サンプル出力

0 
1 
2 
2

INT [DIRの8 ] [ 2 ] = { 10111、 - 1、 - 10、 - 11、 - 1、 - 1010、 - 1 };                 / / フル
チャー CH [ 100 + 5 ] [ 100 + 5 ];
 int型N-、M、CNT;
 無効 DFS(int型 XをINTのY)
{ 
    場合(CH [X] [Y] == ' @ ' 
        CH [X] [Y] = ' ' 以下のためにint型 i = 0 ; iは< 8 ; iは++ 
    { 
        int型 NX = DIR [i]が[ 0 ] + X。
        INT NY = DIR [I] [ 1 ] + Y。
        もし(NX> = 0 && NY> = 0 && NX <N && NY <M && CH [NX] [NY] == ' @ ' 
            DFS(NX、NY)。


INT メイン()
{ 
    TXT(); / *文件测试* / TLE; / *关闭流* / 
    ながら(CIN >> N >> M && N && M)
    { 
        CNT = 0 以下のためにint型 i = 0 ; iがn <; I ++ のためのINT J = 0 ; J <M、J ++ 
                CIN >> CH [I] [J]。
        以下のためにint型 i = 0 ; iがn <I ++ のためのINT J = 0 ; J <M、J ++ 場合(CH [I] [J] ==' @ ' 
                { 
                    DFS(i、j)は、
                    CNT ++ ; 
                } 
        COUT << CNT << ENDL。
    } 
    OK。
}

 

おすすめ

転載: www.cnblogs.com/Shallow-dream/p/11616463.html