题目意思很简单:就是给定一个横向为N,纵向为M的田园,由于灾难有K个点形成了水池,问这些点组成最大的水池中包含有多少个小水池点
这题目对应的知识点是:连通分量
刚开始时候我自己写的代码没有注意到可以是环状的,导致有错误
于是借鉴别人代码改进了一些,并且深入理解了连通分量的精髓了
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int N,M,K; int visit[105][105]; int dx[]={1,-1,0,0}; int dy[]={0,0,1,-1}; int tempans; void dfs(int x,int y) { if(x<1||y<1||x>N||y>M||visit[x][y]==0) return ; visit[x][y]=0; tempans++; for(int j=0;j<4;j++) dfs(x+dx[j],y+dy[j]); } int main() { while(scanf("%d%d%d",&N,&M,&K)!=EOF) { int tempa,tempb; memset(visit,0,sizeof(visit)); for(int i=0;i<K;i++){ scanf("%d%d",&tempa,&tempb); visit[tempa][tempb]=1; } int ans=1; for(int i=1;i<=N;i++) for(int j=1;j<=M;j++) if(visit[i][j]){ tempans=0; dfs(i,j); ans=max(ans,tempans); } printf("%d\n",ans); } return 0; }