北大oj百练-2815:城堡问题

【北大oj百练-2815:城堡问题】注意点:房间数的++在DFS外,房间大小的++在DFS内部

#include #include #include #define maxn 60 using namespace std; int R,C; //R表示行数,C表示列数 int rooms [maxn][maxn]; int color [maxn][maxn]; //方块是否染色过的标记 int maxRoomArea=0,roomNum=0; int roomArea; void Dfs(int i, int k) //i表示上下,k表示左右 { if(color[i][k]) return ; roomArea++; color[i][k]=roomNum; //随便赋一个不为0的数 if((rooms[i][k]&1)==0) Dfs(i,k-1); //如果西边没墙,向西走 if((rooms[i][k]&2)==0) Dfs(i-1,k); //向北 if((rooms[i][k]&4)==0) Dfs(i,k+1); //向东 if((rooms[i][k]&8)==0) Dfs(i+1,k); //向南 } int main() { cin >> R >> C; for(int i=1; i<=R; i++) { for(int k=1; k<=C; k++) { cin >> rooms[i][k]; } } memset(color,0,sizeof(color)); for(int i=1; i<=R; i++) { for(int k=1; k<=C; k++) { if(!color[i][k]) { roomNum++; roomArea=0; Dfs(i,k); maxRoomArea=max(roomArea,maxRoomArea); } } } cout << roomNum <

    推荐阅读