首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

不同的申请,竟然出现有关问题

2012-02-23 
不同的申请,竟然出现问题。#include iostreamusingnamespacestd#defineN10//改变N的值可变为N皇后问题。i

不同的申请,竟然出现问题。
#include <iostream>
using   namespace   std;
#define   N   10                             //改变N的值可变为N皇后问题。


int   total=0;

//int   *S=new   int(N);           //用这种格式时N <7可以显示正确结果,N> =7时出现错误。搞了半天还不明所以,请教高手给个解释。

int   S[N]={-1};//该为这种情况得到正确结果。??????????????想破了头还没头绪。


bool   If_Ok(int   i,int   j)                                 //检查是否有冲突
{
  int   ii,jj;
  for(ii=i-1;ii> =0;ii--)
    if(S[ii]==j)
      return   false;
   
  ii=i;jj=j;
  while((--ii)> =0&&(--jj)> =0)
  {
    if(S[ii]==jj)
    {
      return   false;
    }
  }
  ii=i;jj=j;
  while((--ii)> =0&&(++jj) <N)
  {
    if(S[ii]==jj)
    {
      return   false;
    }
  }

  return   true;

}

void   PrintS()                         //输出每种合法种类
{

 
             
  for(int   i=0;i <N;i++)
  {
   
   
  cout < <S[i] < < "   ";
         
   
   
  }
  cout < <endl;
 
}
 
void   Fun(int   i)      
{

        if(i> =N)
  {    

      total++;
    PrintS();
   
  }
  else
  {for(int   j=0;j <N;j++)
  {
    S[i]=j;
    if(If_Ok(i,j))
    {
      Fun(i+1);
   
     
    }
    S[i]=-1;
  }
 
}

}


void   main()
{
      Fun(0);
      cout < < "总共的合法数: " < <total < <endl;
}


[解决办法]
int *S=new int(N);

int *S=new int[N]; //恐怕你要的是这个,不同的语意
[解决办法]
因为内存对齐问题,new每次均分配8的倍数。
不过,不同编译器有不同结果。

热点排行