这是什么鬼。。。重发一下。。。
```
#include<bits/stdc++.h>
using namespace std;
int n,count1;
int array[15];
void print (int n);
bool isok(int i);
void tl(int i);
int main() {
cin>>n;
tl(1);
cout<<count1;
return 0;
}
void print (int i) {
if(count1<3) {
for(int j=1; j<i; j++)
cout<<array[j]<<' ';
cout<<array[i]<<endl;
}
count1++;
}
bool isok(int i) {
for(int j=i-1; j>=1; j--) {
if(array[i]==array[j]||abs(array[i]-array[j])==i-j)
return false;
}
return true;
}
void tl(int i) {
if(i>n)
print(n);
else {
for(int j=1; j<=n; j++) {
array[i]=j;
if(isok(i))
tl(i+1);
array[i]=0;
}
}
}
```
by 佐倉萌香 @ 2018-07-13 11:02:24
不能用isok(i)判断可行,这样凭空多了一层循环那。。
by nianheng @ 2018-07-13 11:55:24
你可以改成用数组记录这一列和对角线有没有棋子,O(1)判断,应该就能过了
by nianheng @ 2018-07-13 11:57:03