1 条题解
-
1
#include<iostream> using namespace std; int n; bool cow[1000]; //hang bool diag1[1000]; bool diag2[1000]; //对角线 int arr[10000]; int count = 0; void dfs(int coww, int cnt) { if (cnt == n) { if (count < 3) { for (int i = 1; i <= n; i++) { cout << arr[i] << " "; } cout << endl; } count++; return ; } //对于对角线问题 很像 当初写div3的B //我们定义了个K k每次加1 我们让x和y加k //在此不是同理 我们x和y一起加i 判断是否为0 //这个i同时代表了列数 就像打印一样 //左边的对角线也就是11 22 33 我们列数减行数 就可以表示 副对角线是x+y //加n防止负数 re 没必要开二维 for (int i = 1; i <= n; i++) { if (cow[i] == 0 && diag1[coww - i + n] == 0 && diag2[coww + i] == 0) { arr[coww] = i; cow[i] = diag1[coww - i + n] = diag2[coww + i] = 1; dfs(coww + 1, cnt+1); cow[i] = diag1[coww - i + n] = diag2[coww + i] = 0; } } } int main() { cin >> n; dfs(1, 0); cout<<count<<endl; return 0; } 看到没有贴一个
- 1
信息
- ID
- 751
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 90
- 已通过
- 22
- 上传者