八皇后
Posted ssniper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八皇后相关的知识,希望对你有一定的参考价值。
每个皇后的攻击范围为它所在的这一横排,这一竖排,以它为中心的两条对角线
要求求出每一行每一列都有棋子,且相互攻击不到的摆法,输出字典序前三种满足条件的答案,每一个答案一次输出棋盘每一行棋子所在的列
思路:典型的dfs搜索题。从第一行第一列开始,遍历完该行的每一列,对于每一列,判断是否可走,若可走,dfs下一行,dfs递归的出口是判断是否到了最后一行,若到了则走成功,记录一次
#include<bits/stdc++.h> using namespace std; int n; int ans[14]; int cnt; int col[100], dig1[100], dig2[100]; void myPrint() cnt++; if(cnt <= 3) for(int i=1; i<=n; i++) cout << ans[i] << " "; cout << endl; void dfs(int r) if(r > n) myPrint(); return; for(int i=1; i<=n; i++) if( !col[i] && !dig1[r-i+n] && !dig2[r+i] ) ans[r] = i; col[i] = 1; dig1[r-i+n] = 1; dig2[r+i] = 1; dfs(r+1); col[i] = 0; dig1[r-i+n] = 0; dig2[r+i] = 0; int main() ios::sync_with_stdio(1); cin >> n; dfs(1); cout << cnt; return 0;
以上是关于八皇后的主要内容,如果未能解决你的问题,请参考以下文章