码迷,mamicode.com
首页 > 其他好文 > 详细

八皇后

时间:2019-07-26 22:57:46      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:name   syn   dfs   pac   amp   color   mes   成功   names   

技术图片技术图片

每个皇后的攻击范围为它所在的这一横排,这一竖排,以它为中心的两条对角线

要求求出每一行每一列都有棋子,且相互攻击不到的摆法,输出字典序前三种满足条件的答案,每一个答案一次输出棋盘每一行棋子所在的列

 

思路:典型的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;
}

 

八皇后

标签:name   syn   dfs   pac   amp   color   mes   成功   names   

原文地址:https://www.cnblogs.com/ssNiper/p/11253292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!