![
这两张图片中唯一的区别就是这个why变量定义的位置,为什么两次的结果查这么多。。。都是全局变量就是换个顺序就能差这么多。。。这是为啥?
这个程序是N皇后的方案,4到12都没问题,就这个13出现了这种奇怪的问题。编译器用的devCpp。我试着换了VS,它也有同样的问题,不过那个why最后的累加值没有变化,但是那三个方案输出的值不一样。。。
这是什么问题,跪求大神解答。。。
代码如下:
#include
using namespace std;
int N;
int WZ[14];
int L[14];
int ZD[26];
int FD[26];
int RC=0;
int R[3][14];
int why=0;
void init()
{
for(int i=0;i<=N;++i)
{
WZ[i]=0;
L[i]=0;
}
for(int i=0;i<=2*N;++i)
ZD[i]=FD[i]=0;
}
bool Check()
{
for(int i=1;i
{
if(i1)
return false;
if(ZD[i]>1||FD[i]>1)
return false;
}
return true;
}
void DFS(int X,int Y)
{
WZ[X]=Y;
L[Y]++;
ZD[X-Y+N]++;
FD[X+Y-1]++;
if(X>N||!Check())
return ;
if(X==N)
{
if(RC<3)
{
for(int i=1;i<=N;++i)
R[RC][i]=WZ[i];
RC++;
}
//why++;
return ;
}
for(int i=1;i<=N;++i)
{
int x=X+1;
int y=i;
DFS(x,y);
L[y]--;
ZD[x-y+N]--;
FD[x+y-1]--;
WZ[x]=0;
}
}
int main()
{
cin>>N;
for(int i=1;i<=N;++i)
{
cout<<"i"<<i<<endl;
init();
DFS(1,i);
}
for(int i=0;i<RC;i++)
{
for(int j=1;j<=N;++j)
{
cout<<R[i][j]<<" ";
}
cout<<endl;
}
cout<<why<<endl;
return 0;
}