读书人

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

发布时间: 2012-02-23 22:01:36 作者: rapoo

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

读书人网 >C++

热点推荐