下面的程序出现了奇怪的错误:主要原因是对数组的定义理解不透彻,程序中的b[2][100];只含有2个一维数组b[0]和b[1],根本没有定义b[2],当然也不会给它初始化,所以运行时会出现意料之外的错误。
#include<cstdio>
#include<iostream>#include<cstring>using namespace std;int a[100],b[2][100];int n,s=0;void dfs(int cur){ cout<<n<<endl; if (cur==n){ for (int i=1;i<n;i++)cout<<a[i]<<" "; cout<<a[n]<<endl; s++; return; } for (int i=1;i<=n;i++) if(!b[0][i]&&!b[1][cur+1-i+n]&&!b[2][cur+1+i]) { a[cur+1]=i; b[0][i]=1; b[1][cur+1-i+n]=1; b[2][cur+1+i]=1; dfs(cur+1); b[0][i]=0; b[1][cur+1-i+n]=0; b[2][cur+1+i]=0; }}int main(){ memset(a,0,sizeof(a));// memset(b,0,sizeof(b));//初始化后b[2]并不是0, cin>>n; cout<<n<<endl; for (int i=0;i<=2;i++){ for (int j=0;j<=n+n;j++) b[i][j]=0; cout<<i<<":"<<n<<endl;//n在i=2后为什么会变为0 } dfs(0); cout<<n<<endl; cout<<s<<endl; return 0;}解决方法:变量定义的位置交换,先定义变量后定义数组,问题解决?可这是为什么呢,难道系统会给不同的变量分配相同的存储空间?但是用memset赋值还是会出错呢?
#include<cstdio>
#include<iostream>#include<cstring>using namespace std;int n,s=0;
int a[100],b[2][100];void dfs(int cur){ cout<<n<<endl; if (cur==n){ for (int i=1;i<n;i++)cout<<a[i]<<" "; cout<<a[n]<<endl; s++; return; }