题目链接:http://poj.org/problem?id=3620
DFS基础题~
#include<cstdio> #include<iostream> #include<sstream> #include<cstdlib> #include<cstring> #include<string> #include<climits> #include<cmath> #include<algorithm> #include<queue> #include<vector> #include<stack> #include<set> using namespace std; #define maxn 100+5 #define INF 0x3f3f3f3f int n,m,k,fi,fj,sum; int map[maxn][maxn],vis[maxn][maxn]; int dir[4][2]= {0,1,0,-1,1,0,-1,0}; bool find() { for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) if(map[i][j]&&!vis[i][j]) { fi=i; fj=j; return 1; } return 0; } void DFS(int i,int j) { for(int k=0; k<4; k++) { int a = i + dir[k][0]; int b = j + dir[k][1]; if( a>=1 && a<=n && b>=1 && b<=m && !vis[a][b] && map[a][b] ) { vis[a][b] = 1; DFS(a,b); sum++; } } } int main() { int i,j; while(~scanf("%d%d%d",&n,&m,&k)) { memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); int a,b; for(i=1; i<=k; i++) { scanf("%d%d",&a,&b); map[a][b]=1; } int result=-INF; while(find()) { vis[fi][fj]=1; sum=1; DFS(fi,fj); result=max(result,sum); } printf("%d\n",result); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qq_30076791/article/details/47754739