标签:
题目链接:http://poj.org/problem?id=1164
1、深搜,每个点都访问一次,没有标记的话,就做深搜,同时标记。
#include <iostream> #include <algorithm> #include <cstring> using namespace std; int r,c; int rooms[60][60],color[60][60]; int MAX=0,NUM=0; int area; void dfs(int i,int j) { if(color[i][j]!=0) return ; else { color[i][j]=1; area++; if((rooms[i][j]&1)==0) dfs(i,j-1);///向西 if((rooms[i][j]&2)==0) dfs(i-1,j);///向北 if((rooms[i][j]&4)==0) dfs(i,j+1);///向东 if((rooms[i][j]&8)==0) dfs(i+1,j);///向南 } } int main() { cin>>r>>c; memset(color,0,sizeof(color)); for(int i=1; i<=r; i++) for(int j=1; j<=c; j++) cin>>rooms[i][j]; for(int i=1; i<=r; i++) { for(int j=1; j<=c; j++) { if(color[i][j]==0) { NUM++; area=0; dfs(i,j); MAX=max(MAX,area); } } } cout<<NUM<<endl<<MAX; return 0; }
标签:
原文地址:http://www.cnblogs.com/TreeDream/p/5236801.html