1 条题解
-
0
#include<bits/stdc++.h>
using namespace std;
int a[10][10],sum,b[100][10];
bool check(int x,int y){
for(int i=1;i<x;i++) if(a[i][y]==1) return false; for(int i=x+1;i<=8;i++) if(a[i][y]==1) return false; for(int i=x+1;i<=8;i++)if(y+i-x<=8&&a[i][y+i-x]==1)return false; for(int i=x-1;i>=1;i--)if(y-(x-i)>=1&&a[i][y-(x-i)]==1)return false; for(int i=x-1;i>=1;i--)if(y+(x-i)<=8&&a[i][y+(x-i)]==1)return false; for(int i=x+1;i<=8;i++)if(y-i+x>=1&&a[i][y-i+x]==1)return false; return true;} void dfs(int x){
if(x>8){ sum++; for(int i=1;i<=8;i++){ for(int j=1;j<=8;j++){ if(a[i][j]==1) b[sum][i]=j; } } return ; } for(int i=1;i<=8;i++){ if(check(x,i)){ a[x][i]=1; dfs(x+1); a[x][i]=0; } }}
int main(){
dfs(1); int n; cin>>n; for(int i=1;i<=n;i++){ int m; cin>>m; for(int j=1;j<=8;j++){ cout<<b[m][j]; } cout<<endl; }}
- 1
信息
- ID
- 5383
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者