c++计数器的初始值问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 14:44:54
我用c++做八皇后问题,用一个整型变量"num"做计数器,结果只得到91种方案(正解为92种),然后偶然间发现,如果我把num的初始值设为1,最后的输出结果就是93,也就是说答案没错!设为2,结果就是94,设为3,就是95......但就是设为0时结果为91,非常奇怪。源代码如下,请各位大虾帮忙!
#include<iostream>
using namespace std;
int num = 1;
int a[16][16]={0};
void step(int x,int y)
{

int i;
for (i=0;i<=x-1;i++)
{
if ( a[i][y]==1 )
return;
}
for (i=x-1;i>=0;i--)
{
if(a[i][y-(x-i)]==1 || a[i][y+(x-i)]==1)
return;
}
if (x==7)
{
num++;
for(int x1=0;x1<=7;x1++){
for(int x2=0;x2<=7;x2++)
cout<<a[x1][x2];
cout<<endl;
}
cout<<"____________________"<<endl;
return;
}
for(i=0;i<=7;i++)
if ((i!=y) && (i!=y+1) && (i!=y-1)){
a[x+1][i]=1;
step(x+1,i);
a[x+1][i]=0;
}
}

int main()
{
int i;

for (i=0;i<=7;i+

如果是为了应付,采取如下改法:
数组a和num的定义换一下顺序
int a[16][16]={0};
int num = 0;

根本原因
if(a[i][y-(x-i)]==1 || a[i][y+(x-i)]==1) 有问题
a的数组下标为负可能与num的空间重叠了
仔细考虑这个if怎么写