求助dalao

P1219 [USACO1.5] 八皇后 Checker Challenge

这是什么鬼。。。重发一下。。。 ``` #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


|