城のDFSの問題

2019年6月1日

17時54分51秒

ちょっと待って!

トピックリンク:

http://bailian.openjudge.cn/practice/2815

#include <ビット/ STDC ++ H.>
 使用して 名前空間STD; 

INT N- = 0、M = 0 ;
 int型 roomNumber = 0 ;
 int型 ROOMSIZE = 0 ;    // 現在の部屋の面積の大きさ
INT maxRoomSize = 0 ;
 int型ルーム[ 100 ] [ 100 ];
 int型カラー[ 100 ] [ 100 ]; 


ボイド DFS(int型 X、INT Y); 


int型のmain()
{ 
    

    scanfの(" %D%D"&N、& M)
     のためのint型 I = 0 iがN <; Iは++ 
    { 
        ためINT J = 0 ; J <Mであり、j ++ 
        { 
            scanf関数(" %のD "、&ルーム[I] [J ]); 
        } 
    } 


    のためにint型 i = 0 ; iがn <; iは++ 
    { 
        ためのint型 J = 0 ; J <Mであり、j ++ 
        { 
            場合(色[I] [J] == 0 
            {
                roomNumber
    } ++ ; 
                ROOMSIZE = 0 ; 
                DFS(i、j)は、
                maxRoomSize = MAX(maxRoomSize、ROOMSIZE)。

            } 
        } 
    } 


    COUT << roomNumber << ENDL。
    coutの << maxRoomSize << てendl;
    リターン 0 ; 
} 

ボイド DFS(int型のx、int型のY)
{ 
    場合(色[X] [Y] =!0 
    { 
        返します
    ROOMSIZE ++; 
    色[X] [Y] = roomNumber。
    もし((部屋[X] [Y]&1)== 0 
        DFS(X、Y - 1)。  // 向西走
    場合((部屋[X] [Y] - 2)== 0 
        DFS(X - 1、Y); // 向北走
    場合((部屋[X] [Y]&4)== 0 
        DFS(X、Y + 1)。  // 向东走
    場合((部屋[X] [Y]&8)== 0 +
        DFS(X 1、Y); //  
}

 

おすすめ

転載: www.cnblogs.com/Artimis-fightting/p/10960549.html