1 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int maxn=101; int n; // n*n的棋盘 int cnt=0; // 方案数 int place[maxn]; // place[行号]=列号,用于表示每行的皇后放在哪一列上 bool cols[maxn]; // cols[列号]=0或1,表示该列上是否有皇后了 bool lt[maxn]; // lt[编号]=0或1,表示该编号的左对角线上是否有皇后了 bool rt[maxn]; // rt[编号]=0或1,表示该编号的右对角线上是否有皇后了 void dfs(int i){ // i表示行,j表示列 if(i>n){ cnt++; return; } //开始遍历当前行的每一列 for(int j=1;j<=n;j++){ //开始剪枝,判断当前位置是否能放皇后(当前位置所在的列、左斜线、右斜线没有皇后) if(cols[j]==false && lt[i-j+n]==false && rt[i+j]==false){ //在当前位置放置皇后 place[i]=j; cols[j]=true; lt[i-j+n]=true; rt[i+j]=true; //递归到下一行,继续放置皇后 dfs(i+1); //回溯(撤销上述操作) place[i]=0; cols[j]=false; lt[i-j+n]=false; rt[i+j]=false; } } } int main(){ cin >> n; // dfs(1); //从棋盘的第一行开始放置皇后 // cout << cnt; // return 0; }
信息
- ID
- 1268
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 4
- 已通过
- 4
- 上传者