USACO training course Checker Challenge N皇後 /// oj10125
阿新 • • 發佈:2018-04-20
for 前三 所有 name AS opened clu dfs esp
...就是N皇後
輸出前三種可能排序
輸出所有可能排序的方法數
vis[0][i]為i點是否已用
vis[1][m+i]為i點副對角線是否已用 m+i 為從左至右第 m+i 條副對角線
vis[1][m+n-i]為i點主對角線是否已用 m+n-i 為從右至左第 m+n-i 條主對角線
#include<iostream> #include<algorithm> #include<stdio.h> #include<cstring> #include<math.h> using namespace std; int n,cnt;View Codeint ans[100],vis[5][50]; void DFS(int m) { if(m==n+1) { cnt++; if(cnt<=3) { for(int i=1;i<n;i++) printf("%d ",ans[i]); printf("%d\n",ans[n]); } return ; } for(int i=1;i<=n;i++) { if(!vis[0][i]&&!vis[1][m+i]&&!vis[2][m-i+n]) { vis[0][i]=vis[1][m+i]=vis[2][m-i+n]=1; ans[m]=i; DFS(m+1); vis[0][i]=vis[1][m+i]=vis[2][m-i+n]=0; } } } int main() { while(~scanf("%d",&n)) { memset(ans,0,sizeof(ans)); cnt=0; DFS(1); printf("%d\n",cnt); } return 0; }
USACO training course Checker Challenge N皇後 /// oj10125