1 solutions
-
1
#include<bits/stdc++.h> using namespace std; const int N=8; int ans[100][10]; int a[N]; int cnt; int row[N],dg[N*2+2],ndg[N*2+2]; void dfs(int r) { if(r==N) //找到一组解 { cnt++; for(int i=0;i<N;i++) //记录当前这组方案 ans[cnt][i]=a[i]+1; return ; } for(int c=0;c<N;c++) //枚举列 { if(row[c]==0&&dg[r+c]==0&&ndg[r-c+N]==0) //可以放置 { row[c]=dg[r+c]=ndg[r-c+N]=1; //标记同列,同对角线 a[r]=c; //记录第cnt个解的第r个元素是c列 dfs(r+1); //搜索下一行 row[c]=dg[r+c]=ndg[r-c+N]=0; //换个分支 } } } int main() { dfs(0); int n; cin>>n; while(n--) { int t; cin>>t; for(int i=0;i<8;i++) cout<<ans[t][i]; cout<<endl; } return 0; }
- 1
Information
- ID
- 238
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 14
- Accepted
- 5
- Uploaded By