原題傳送門ios
很經典的搜索題,但本蒟蒻卡了1個多小時,搜索部分很簡單,可是判重的部分是真的蛋疼,我寫了一個高效率的判重算法,可是不管檢查多少遍都沒有問題的算法卻老是WA......後來我乾脆寫了一個超簡單可是慢的算法......而後,過了???這數據水的過度了啊......早知如此我還費勁推高端算法幹啥子嘞......算法
/*int r(int h,int l) { int i; for(i=1;i<h;i++) { if(a[i][l]==1||a[i][h+l-i]==1||i-h+l>0&&a[i][i-h+l]==1) return 0; } return 1; }*/ #include<iostream> #include<cstdio> #include<string> #include<vector> #include<algorithm> #include<cstdlib> #include<cmath> #include<stack> #include<map> using namespace std; int n,a[15][15],ans; int r(int h,int l) { for(int i=1; i<h; i++) if(a[i][l] == 1) return false; for(int i=h-1,j=l-1; i>0&&j>0; i--,j--) if(a[i][j] == 1) return false; for(int i=h-1,j=l+1; i>0&&j<=n; i--,j++) if(a[i][j] == 1) return false; return true; } void dfs(int h) { if(h==n+1) { ans++; return; } int l; for(l=1;l<=n;l++) { a[h][l]=1; if(r(h,l)) dfs(h+1); a[h][l]=0; } } int main() { cin>>n; dfs(1); cout<<ans<<endl; return 0; }