题目链接:
1、深搜,每个点都访问一次,没有标记的话,就做深搜,同时标记。
#include#include #include 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< < <