塞思克Cesc 2017-02-06 13:37 采纳率: 0%
浏览 1715
已采纳

关于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 2017-02-07 03:40
    关注

    代码问题:
    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.
    其他问题还没排查,你先确定下是不是这个问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题