#include <iostream> using namespace std; #define MAX 52 int map[MAX][MAX]; bool visited[MAX][MAX]; int m, n; int maxArea = -1; int area; void dfs(int i, int j) { visited[i][j] = true; area++; if(!(map[i][j] & 1))//left if(j-1 >= 0 && !visited[i][j-1]) dfs(i, j-1); if(!(map[i][j] & 2))//up if(i-1 >= 0 && !visited[i-1][j]) dfs(i-1,j); if(!(map[i][j] & 4))//right if(j+1 < n && !visited[i][j+1]) dfs(i, j+1); if(!(map[i][j] & 8))//down if(i+1 < m && !visited[i+1][j]) dfs(i+1, j); } int main() { scanf("%d%d", &m, &n); for(int i = 0; i < m; ++i) for(int j = 0; j < n; ++j) scanf("%d", &map[i][j]); memset(visited, false, sizeof(bool)*MAX*MAX); // debug原来是sizeof(bool)写成了sizeof(int),内存冲突,以后一定要注意 int cnt = 0; for(int i = 0; i < m; ++i) for(int j = 0; j < n; ++j) if(!visited[i][j]) { area = 0; dfs(i, j); if(area > maxArea) maxArea = area; cnt++; } printf("%d/n%d/n", cnt, maxArea); return 0; }