不同的申请,竟然出现问题。
#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的倍数。
不过,不同编译器有不同结果。