您的位置:首页 > 其它

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

2015-10-15 22:27 330 查看

题目大意:

给定一张图,求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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: