小岛面积-期末考试试题

时间: 1ms        内存:128M

描述:


上面矩阵的中的1代表海岸线,0代表小岛。求小岛面积(即被1中包围的0的个数)的最大值。

输入:

第一行输入一个整数N(1<=N<=100),表示输入方阵的维数

输入一个N维方阵


输出:

小岛面积

示例输入:

6
1 1 1 1 1 1
1 1 0 0 0 1
1 0 0 0 1 0
1 1 0 1 1 1
0 1 0 1 0 0
1 1 1 1 1 1

示例输出:

8

提示:

参考答案(内存最优[1120]):

#include<stdio.h>
int N;
int count=0;
int main()
{
    void dsr(int x,int y,int c[N][N]);
    scanf("%d",&N);
    int a[N][N];
    int d[N][N];
    int i,j;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
        scanf("%d",&a[i][j]);
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
    {
        dsr(i,j,a);
        d[i][j]=count;
        count=0;
    }
    int max=0;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
    {
            if(max<d[i][j])
                max=d[i][j];
    }
    printf("%d",max);
}
void dsr(int x,int y,int c[N][N])
{
    if(x>N || y>N || x<0 || y<0 || c[x][y]!=0)
        return ;
    if(c[x][y]==0)
    {
        count++;
        c[x][y]++;
        dsr(x+1,y,c);
        dsr(x-1,y,c);
        dsr(x,y+1,c);
        dsr(x,y-1,c);
    }
    return ;
}

参考答案(时间最优[1]):

#include<stdio.h>
int main()
{
    int cnt=0;
    int N;
    scanf("%d",&N);
    int a[N][N];
    int i,j;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
        scanf("%d",&a[i][j]);
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
        {
            if(a[i][j]==0&&(a[i-1][j]==0||a[i][j-1]==0||a[i][j+1]==0||a[i+1][j]==0))
            cnt++;
            if(a[i][j]==0&&a[i][j+1]==0&&(a[i-1][j]==1&&a[i][j-1]==1&&a[i+1][j]==1&&a[i-1][j+1]==1&&a[i][j+2]==1&&a[i+1][j+1]==1))
                cnt-=2;
        }
    printf("%d",cnt);
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。