zoukankan      html  css  js  c++  java
  • 八皇后

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

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

    思路:典型的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;
    }
  • 相关阅读:
    不等式(一)-Markov与Chebyshev不等式
    决策树学习
    k-NN最近邻算法(k-nearest neighbors algorithm)
    梯度下降(Gradient Descent)数学原理分析与实例
    求解素数
    shell基础命令使用
    安装jenkins
    idea拉取git
    shell常用命令
    linux 安装jdk
  • 原文地址:https://www.cnblogs.com/ssNiper/p/11253292.html
Copyright © 2011-2022 走看看