zoukankan      html  css  js  c++  java
  • 回溯法解八皇后问题

    //回溯法求解八皇后问题
    //Linruier
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    bool ok(int a[],int num)
    {
    if(num==0)return true;
    for(int i=0;i<num-1;i++)if(a[num-1]==a[i])return false;
    for(int i=0;i<num-1;i++)if(a[num-1]-a[i]==num-1-i||a[num-1]-a[i]==i-num+1)return false;
    return true;
    }
    int main()
    {
    int a[8];//a数组记录每一行的皇后的列数
    int cnt=0;
    for(int i=0;i<8;i++)a[i]=0;
    int k=0;int c[8];//c数组记录
    for(int i=0;i<8;i++)c[i]=1;
    while(k>=0)
    {
    while(c[k]<=8)
    {a[k]=c[k]++;
    if(k==7&&ok(a,8)){cnt++;break;}//是完整的解
    else if(k<7&&ok(a,k+1)){k++;continue;}//是部分解
    }
    c[k]=1;//回溯之前把外围的位置选择恢复为8种
    k--;//回溯
    }
    cout<<"8皇后问题共有"<<cnt<<"种解"<<endl;
    }

  • 相关阅读:
    Web Api 模型绑定 二
    C#关键字
    ASP.NET Core MVC 过滤器
    EF性能优化篇一
    Linq
    HTTP协议
    Linux进程管理(11)
    Linux网络配置(10)
    Django模板修炼
    递归
  • 原文地址:https://www.cnblogs.com/linruier/p/8633751.html
Copyright © 2011-2022 走看看