菜鸟求帮助 皇后问题

_celsior edited 3 年,2 月前

前五组都是对的,第六组不知道为什么错了

#include <stdio.h>

int main()
{
   int num=0,i,j,x,y,q=0;
   int*cnt=&q;
   int flag;
   int ret=0;
   scanf("%d",&num);
    int a[num+1][num+1];
    for(i=0;i<num;i++){
        for(j=0;j<num;j++)
        {
            a[i][j]=0;
        }
    }
   for(i=0;i<num;i++)//x方向
   {
      scanf("%d %d",&x,&y);
      x=x-1;
      y=y-1;
      a[x][y]=1;
   }
   for(i=0;i<num;i++)
   {
      flag=0;
      ret=ret+q*(q+1)/2;
      *cnt=0;
      for(j=0;j<num;j++)
      {
         if(a[i][j]==1&&flag==1)
         {
            *cnt=*cnt+1;
         }
         if(flag==0&&a[i][j]==1)
         {
            flag=1;
         }
      }

   }
   for(j=0;j<num;j++)//y方向
   {
      flag=0;
      ret=ret+q*(q+1)/2;
      *cnt=0;
      for(i=0;i<num;i++)
      {
         if(a[i][j]==1&&flag==1)
         {
            *cnt=*cnt+1;
         }
         if(flag==0&&a[i][j]==1)
         {
            flag=1;
         }
      }
   }
   for(i=num-1;i>=0;i--)//↘上半区
   {
      flag=0;
      ret=ret+q*(q+1)/2;
      *cnt=0;
      for(j=0;j<=num-i-1;j++)
      {
         if(a[j][i+j]==1&&flag==1)
         {
            *cnt=*cnt+1;
         }
         if(flag==0&&a[j][i+j]==1)
         {
            flag=1;
         }
      }
   }
   for(i=1;i<num;i++)//↘下半区
   {
      flag=0;
      ret=ret+q*(q+1)/2;
      *cnt=0;
      for(j=0;j<=num-i-1;j++)
      {
         if(a[i+j][j]==1&&flag==1)
         {
            *cnt=*cnt+1;
         }
         if(flag==0&&a[i+j][j]==1)
         {
            flag=1;
         }
      }
   }
   for(i=0;i<num;i++)//↙上半区
   {
      flag=0;
      ret=ret+q*(q+1)/2;
      *cnt=0;
      for(j=0;j<i+1;j++)
      {

         if(a[j][i-j]==1&&flag==1)
         {
            *cnt=*cnt+1;
         }
         if(flag==0&&a[j][i-j]==1)
         {
            flag=1;
         }
      }
   }
   for(i=1;i<num;i++)//↙下半区
   {
      flag=0;
      ret=ret+q*(q+1)/2;
      *cnt=0;
      for(j=0;j<num-i;j++)
      {
         if(a[j][i+j]==1&&flag==1)
         {
            *cnt=*cnt+1;
         }
         if(flag==0&&a[j][i+j]==1)
         {
            flag=1;
         }
      }
   }
    printf("%d",ret);
    return 0;
}

Comments