wangwei6125
塞思克Cesc
采纳率53.3%
2017-02-06 13:37

关于C++的问题,全局变量定义的先后对程序有影响吗?很神奇的问题。。

![图片说明
图片说明

这两张图片中唯一的区别就是这个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;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • lxf2580 lxf2580 4年前

    代码问题:
    void init()中如下代码
    for(int i=0;i<=2*N;++i)
    ZD[i]=FD[i]=0;

    i<=2*N是有问题的,会导致ZD[26]=FD[26]=0;但是ZD[26]和FD[26]是不存在的,会导致可能和别的变量共用一个地址。应该改为 i<2*N.
    其他问题还没排查,你先确定下是不是这个问题。

    点赞 1 评论 复制链接分享
  • ljheee ljheee 4年前

    全局变量定义的先后 shi没有什么运行差别的。定义这么多变量,全都初始化一下

    点赞 评论 复制链接分享
  • oyljerry oyljerry 4年前

    你的数组R没有初始化清零。

    点赞 评论 复制链接分享