我写了这段代码来解决N-Queens问题。
有时ex)6和10有error ; free(): invalid next size (fast)
但有时像8和2它不是
我不知道为什么会在特定情况下发生......
#include <iostream>
using namespace std;
bool check(int *a,int num){
for(int i=0;i<num;++i){
if((double)(a[i]-a[num])/(i-num)==1.0||(double)(a[i]-a[num])/(i-num)==-1.0||a[i]==a[num])
return false;
}
return true;
}
int func(int *array,int num,int n){
int sum=0;
for(int i=0;i<n;++i){
array[num]=i;
if(num==n-1){
if(check(array,num))
sum+= 1;
}
if(check(array,num)) sum+=func(array,num+1,n);
}
return sum;
}
int main(){
int N=0;
cin>>N;
for(int i=0;i<N;i++){
int n=0;
cin >> n;
int *array=new int[n];
cout<<"+++++++++"<<n<<endl;
int a = func(array,0,n);
delete[] array;
cout<<a<<endl;
}
return 0;
}