我有个用二级指针的想法
查看原帖
我有个用二级指针的想法
582818
miny1233楼主2022/11/10 10:05

主要思想是:开一个大空间,防止数组溢出

具体如下

#include<stdio.h>
#include<memory.h>
int main()
{
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    char buffer[n+4][n+4];
    memset(buffer,0,(n+4)*(n+4));
    char (*block)[n+2] = buffer[2]+2;
    for(int torch=0;torch<m;torch++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        x-=1;y-=1;
        block[x][y]= 1;
        
        block[x-1][y]=1;
        block[x-2][y]=1;
        block[x+1][y]=1;
        block[x+2][y]=1;
        
        block[x][y+1]= 1;
        block[x][y+2]= 1;
        block[x][y-1]= 1;
        block[x][y-2]= 1;
        
        block[x+1][y+1]= 1;
        block[x-1][y-1]= 1;
        block[x+1][y-1]= 1;
        block[x-1][y+1]= 1;
    }
    for(int yin=0;yin<k;yin++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        x-=1;y-=1;
        for(int zsy=y-2;zsy<=y+2;zsy++)
        {
          for(int zs=x-2;zs<=x+2;zs++)block[zsy][zs]=1;
        }
    }
    int sum = 0;
    for(int l=0;l<n;l++)
    {
        for(int u=0;u<n;u++)
        {
            if(!block[l][u])sum++;
        }
    }
    printf("%d",sum);
}

开一个(n+4)^2的空间防止溢出,这个空间实际上还能压缩一下

用一个指向(n+2)的二级指针指向[2]+2的位置,主要是防止溢出

(本来想把数组控制在正中心的,发现做不到,所以代码中有些蜜汁操作)

从代码中就能看到,不需要任何判断就能完成

2022/11/10 10:05
加载中...