1 solutions
-
-1
#include<bits/stdc++.h> using namespace std; const int N=10; bool col[N],dg[2*N],ndg[2*N];//col是判断某一列有没有元素 int n; //dg[]表示左上到右下有没有元素ndg[] char g[N][N]; //ndg[]表示左下到右上有没有元素 void dfs(int r) { if(r==n) { for(int i=0;i<n;i++) { cout<<g[i]<<endl; } cout<<endl; return ; } for(int i=0;i<n;i++) { if(col[i]==0&&dg[r-i+n]==0&&ndg[r+i]==0)//列,左上到右下都没有 { col[i]=dg[r-i+n]=ndg[r+i]=1;//标记(r,c)的对应列和对角线 g[r][i]='Q'; dfs(r+1); g[r][i]='.'; col[i]=dg[r-i+n]=ndg[r+i]=0; } } } int main() { cin>>n; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { g[i][j]='.'; } } dfs(0); return 0; }
- 1
Information
- ID
- 237
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 40
- Accepted
- 10
- Uploaded By