http://poj.org/problem?id=3620
学长说这道题是广搜题,但是貌似用深搜做更容易,将被淹了的点标记为true,然后
对其上下左右4个点进行深搜,找到相连的最多的点。
/*Accepted 288K 47MS C++ 1080B 2012-07-23 12:20:58*/ #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; const int MAXN = 105; const int dx[] = { 1, -1, 0, 0}; const int dy[] = { 0, 0, -1, 1}; bool map[MAXN][MAXN]; int ans, Max; int N, M, K; void init() { int x, y; memset( map, false, sizeof map); while( K --) { scanf( "%d%d", &x, &y); map[x][y] = true; } } void dfs( int x, int y) { int k, nx, ny; if( !map[x][y]) return; ans ++; map[x][y] = false; for( k = 0; k < 4; k ++) { nx = x + dx[k]; ny = y + dy[k]; if( nx >= 1 && nx <= N && ny >= 1 && ny <= M ) dfs(nx, ny); } } int main() { int i, j; while( scanf( "%d%d%d", &N, &M, &K) != EOF) { init(); Max = 0; for( i = 1; i <= N; i ++) for( j = 1; j <= M; j ++) { ans = 0; dfs(i, j); Max = max(ans, Max); } printf( "%d\n", Max); } return 0; }
浙公网安备 33010602011771号