百练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\n",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\n",i,j); } cout<<d<<endl<<mx<<endl; return 0; }