1. 程式人生 > >USACO training course Checker Challenge N皇後 /// oj10125

USACO training course Checker Challenge N皇後 /// oj10125

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;
int 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; }
View Code

USACO training course Checker Challenge N皇後 /// oj10125