poj 3620 Avoid The Lakes(广搜,简单)

题目

找最大的一片湖的面积,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
",bfs());
    }
    
    return 0;
}
View Code
一道又一道,好高兴!
原文地址:https://www.cnblogs.com/laiba2004/p/3549759.html