百练2815 城堡问题

题目链接

简单搜索

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int data[55][55],n,m;
bool vis[55][55];
int d=0,mx=0,tmp=0;
void dfs(int i,int j,int d)
{
    //printf("%d %d
",i,j);
    if(vis[i][j]) return;
    vis[i][j]=1;
    tmp++;
    if((data[i][j]&1)==0) dfs(i,j-1,d);
    if((data[i][j]&2)==0) dfs(i-1,j,d);
    if((data[i][j]&4)==0) dfs(i,j+1,d);
    if((data[i][j]&8)==0) dfs(i+1,j,d);
}
int main()
{
    memset(vis,0,sizeof(vis));
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    cin>>data[i][j];
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    if(!vis[i][j])
    {
        d++;
        tmp=0;
        dfs(i,j,d);
        mx=max(mx,tmp);
        //printf("%d %d
",i,j);
    }
    cout<<d<<endl<<mx<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/Ritchie/p/6211595.html