八皇后

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;

 

以上是关于八皇后的主要内容,如果未能解决你的问题,请参考以下文章

八皇后问题

八皇后问题

八皇后问题算法详解

Python用迭代(yield)和递归解决八皇后问题

八皇后究竟有多少种解法?怎么解?

八皇后