找最大的一片湖的面积,4便有1边相连算相连,4角不算。
runtime error 有一种可能是 数组开的太小,越界了
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> using namespace std; #define MAXN 110 int map[MAXN][MAXN]; int n,m,sum,a[MAXN*MAXN],b[MAXN*MAXN];//runtime error 原来是这里小了 int xx[4]={0,0,1,-1}; int yy[4]={1,-1,0,0}; struct tt { int x,y; }; int bfs() { int ans,maxx=0; tt front,rear,temp; queue<tt>q; while(!q.empty()) q.pop(); for(int i=0;i<sum;i++) { if(map[a[i]][b[i]]==1) { front.x=a[i];front.y=b[i]; q.push(front); map[a[i]][b[i]]=0; ans=1; while(!q.empty()) { temp=q.front(); q.pop(); for(int j=0;j<4;j++) { rear.x=temp.x+xx[j]; rear.y=temp.y+yy[j]; if(rear.x>0&&rear.y>0&&rear.x<=n&&rear.y<=m&&map[rear.x][rear.y]==1) { q.push(rear); map[rear.x][rear.y]=0; ans++; maxx=maxx>ans? maxx:ans; } } } } } return maxx; } int main() { int i; while(scanf("%d%d%d",&n,&m,&sum)!=EOF) { memset(map,0,sizeof(map)); for(i=0;i<sum;i++) { scanf("%d%d",&a[i],&b[i]); map[a[i]][b[i]]=1; } printf("%d\n",bfs()); } return 0; }
poj 3620 Avoid The Lakes(广搜,简单)
原文:http://www.cnblogs.com/laiba2004/p/3549759.html