hhhyc 发表于 2018-9-28 18:04:48

为什么n>=10的 n皇后问题算不出来?

RT。

claws0n 发表于 2018-9-28 19:41:57

内存满了?不至于吧?

hhhyc 发表于 2018-9-28 20:58:35

claws0n 发表于 2018-9-28 19:41
内存满了?不至于吧?

int Count=0;       //方法计数
int FirstRow=0;   //第一行皇后位置
int RowIsOk=0;
int IsNotDanger(int row,int col)
{
    if(chess==-1)return 0;   //当前位置
    for(int m=0;m<row;m++)
      if(chess==1)return 0;//列
    for(int m=row-1,n=col-1;m>=0&&n>=0;m--,n--)
      if(chess==1)return 0;    //左上角
    for(int m=row-1,n=col+1;m>=0&&n<N;m--,n++)
      if(chess==1)return 0;    //右上角
    for(int m=row+1,n=col-1;m<N&&n>=0;m++,n--)
      if(chess==1)return 0;    //左下角
    for(int m=row+1,n=col+1;m<N&&n<N;m++,n++)
      if(chess==1)return 0;    //左上角
    return 1;
}
void Queen2(int row)
{
    if(FirstRow==N)return;
    RowIsOk=0;
    if(row==N)
    {
      Count++;
      printf("第 %d 种:\n",Count);
      for(int i=0;i<N;i++)
      {
            for(int j=0;j<N;j++)
            {
                if(chess==1)
                  printf("%d ",chess);
               else printf("0 ");
            }
            cout<<endl;
      }
      for(int j=0;j<N;j++)
            if(chess==1)chess=-1;
    }
    else
    {
      for(int j=0;j<N;j++)
            if(IsNotDanger(row,j))
            {
                RowIsOk=1;
                chess=1;
                Queen2(row+1);
            }
      if(!RowIsOk)
      {
            for(int j=0;j<N;j++)
                if(chess==1)
                {
                  chess=-1;
                  break;
                }
            for(int j=0;j<N;j++)chess=0;
            if(row==1)FirstRow++;
            Queen2(row-1);
      }
    }
}
int main()
{
    for(int i=0;i<N;i++)
      for(int j=0;j<N;j++)
            chess=0;
    Queen2(0);
    return 0;
}
麻烦帮我看一下,谢谢!
N<10的时候一切正常,N>=10就计算不出来了。

页: [1]
查看完整版本: 为什么n>=10的 n皇后问题算不出来?