POJ 3620 Avoid The Lakes (C++)
問題文
http://poj.org/problem?id=3620
解法:深さ優先探索やるだけ。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int n,m,k,tmp,ans=0,d[110][110]; int da[] = {0,1,0,-1}; int db[] = {1,0,-1,0}; void dfs(int a,int b){ tmp++; d[a][b] = 0; for(int i = 0;i < 4;i++){ int na = a + da[i]; int nb = b + db[i]; if(na >= 1 && na <= n && nb >= 1 && nb <= m && d[na][nb] == 1)dfs(na,nb); } } int main(){ cin >> n >> m >> k; while(k--){ int a,b; cin >> a >> b; d[a][b] = 1; } for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++){ if(d[i][j] == 1){ tmp = 0; dfs(i,j); ans = max(ans,tmp); } } } cout << ans << endl; return 0; }