poj 3620 Avoid The Lakes(dfs)

 

 

 

#include<cstdio>

#include<cstring>

#include<iostream>

#include<algorithm>

using namespace std;

int mat[200][200];

int vis[200][200];

int ans,n,m,rt;

int op[4][2]={0,-1,0,1,1,0,-1,0};

bool isok(int x,int y)

{

    if(x<1||x>n||y<1||y>m||vis[x][y]==1||mat[x][y]==0) return false;

    return true;

}

void dfs(int x,int y)

{

    vis[x][y]=1;

    int i,j;

    for(i=0;i<4;i++)

    {

        int tx,ty;

        tx=x+op[i][0];

        ty=y+op[i][1];

        if(isok(tx,ty))

        {

            rt++;

           // printf("%d %d %d %d\n",x,y,tx,ty);

            dfs(tx,ty);

        }

    }

}

int main()

{

    int k;

    int i,j;

    while(scanf("%d%d%d",&n,&m,&k)!=EOF)

    {

        ans=0;

        memset(mat,0,sizeof(mat));

        memset(vis,0,sizeof(vis));

        while(k--)

        {

            int x,y;

            scanf("%d%d",&x,&y);

            mat[x][y]=1;

        }

        for(i=1;i<=n;i++)

        {

            for(j=1;j<=m;j++)

            {

                if(mat[i][j]==1&&vis[i][j]==0)

                {

                    rt=1;

                    dfs(i,j);

                    if(rt>ans) ans=rt;

                }

            }

        }

        printf("%d\n",ans);

    }

    return 0;

}

 

你可能感兴趣的:(poj)