[POJ 1164] The Castle 位运算加搜索

来源:互联网 发布:ibarn网盘系统源码 编辑:程序博客网 时间:2024/04/28 21:42

题目大意:

给定一张图,求dfs图的最大连通块

代码

#include <cstdio>#include <cstring>#include <iostream>using namespace std;int m,n,mat[1000][1000],vis[1000][1000];int cnt(0),cnt2(0);int Dfs(int x,int y) {    if(x<1||y<1||x>m||y>n) return 1;    if((mat[x][y]&1)==0&&vis[x][y-1]==0) {        vis[x][y-1]=1;        Dfs(x,y-1);        cnt++;    }    if((mat[x][y]&2)==0&&vis[x-1][y]==0) {        vis[x-1][y]=1;        Dfs(x-1,y);        cnt++;    }    if((mat[x][y]&4)==0&&vis[x][y+1]==0) {        vis[x][y+1]=1;        Dfs(x,y+1);        cnt++;    }    if((mat[x][y]&8)==0&&vis[x+1][y]==0) {        vis[x+1][y]=1;        Dfs(x+1,y);        cnt++;    }           }int main(){    cin>>m>>n;    memset(vis,0,sizeof(0));    for(int i=1;i<=m;i++){        for(int j=1;j<=n;j++) {            cin>>mat[i][j];        }    }    int maxx(0);        for(int i=1;i<=m;i++) {        for(int j=1;j<=n;j++) {            if(vis[i][j]==0) {                cnt=0;cnt2++;                Dfs(i,j);                if(cnt>maxx) maxx=cnt;            }        }    }    cout<<cnt2<<endl<<maxx<<endl;}
0 0