#include <iostream>#include<cstring>using namespacestd;#defineSize 50intRooms[size+1][size+1];BOOLVisited[size+1][size+1];//status of each lattice access or notintRoomarea;//the size of each room in the castlevoidDFS (intXinty) { if(Visited[x][y])return ; Visited[x][y]=1; Roomarea++; if((rooms[x][y) &1) ==0) DFS (x, y1);//Search the West if((rooms[x][y) &2) ==0) DFS (X-1, y);//to the North if((rooms[x][y) &4) ==0) DFS (x, y+1);//Eastward if((rooms[x][y) &8) ==0) DFS (x+1, y);//to the South}intMain () {introw, column, Roomnum, Maxarea; CIN>>row>>column; Memset (visited,0,sizeof(visited)); for(intI=0; i<row; i++ ) for(intj=0; j<column; J + +) Cin>>Rooms[i][j]; Roomnum= Maxarea =0; for(intI=0; i<row; i++ ) for(intj=0; j<column; J + +)//traverse each lattice to get Roomnum { if(Visited[i][j])Continue; Roomnum++; Roomarea=0; DFS (i, j); Maxarea=Max (Roomarea, Maxarea); } cout<<RoomNum<<Endl; cout<<MaxArea<<Endl; return 0;}
openjudge-2815: Castle problem "Simple Dfs"