zoukankan      html  css  js  c++  java
  • 经典回溯问题--八皇后dfs递归回溯求解【DFS】

     1 //N皇后问题 
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 #define N 8//皇后个数 
     8 int ans=0;
     9 int a[N]={0};//a[i]=j表示在第i行的第j列放置 
    10 bool check0(int i,int j,int a_i,int a_j){//判断两个位置是否相邻,相邻则返回true ,因为是按行排列的  所以不用考虑同行的情况
    11     if(a_i==a_j) return true;//放在同一列
    12     if(fabs(j-i)==fabs(a_i-a_j)) return true;//放在同对角线(主对角线or次对角线)
    13     return false; 
    14 }
    15 bool check(int i,int j){//判断a[i]=j是否不和前面几行冲突 
    16     for(int k=0;k<i;k++){
    17         if(check0(k,i,a[k],j))
    18         return true;
    19     }
    20     return false;//不冲突 可以放 
    21 }
    22 void dfs(int n){//确定第n行应填的位置 
    23     if(n==N) {
    24         ans++;
    25         printf("a[]: ");
    26         for(int i=0;i<N;i++){
    27             printf("%d ",a[i]);
    28         }
    29         printf("
    ");
    30         return;
    31     }
    32     for(int i=0;i<N;i++){//从第0列开始试探
    33         a[n]=i;//假设放在第i列 
    34         if(check(n,i)) continue;
    35         dfs(n+1);
    36         
    37         
    38     }
    39 }
    40 int main(){
    41     dfs(0);
    42     printf("共有%d种解法
    ",ans);
    43     return 0;
    44 }
    用a[i]=j表示第i行的第j列放置皇后,最后a[]则表示所有皇后的放置
    运行结果:

    。。。。省略几张(不想截QAQ

    
    
  • 相关阅读:
    进程和线程
    堡垒机初识--paramiko模块
    python三元运算
    python 遍历文件夹
    CentOs7安装rabbitmq
    logstash 中配置GeoIP解析地理信息
    Centos7单机部署ELK
    Nginx修改access.log日志时间格式
    nginx日志增加cookie信息
    socketserver多线程处理
  • 原文地址:https://www.cnblogs.com/Elaine-DWL/p/6500427.html
Copyright © 2011-2022 走看看