zoukankan      html  css  js  c++  java
  • C++解决八皇后问题

    直接上代码,可以自己慢慢研究

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    int LineNum[9];           //第i列的皇后要放的行位置(只用其中的列号1到8)
    bool a[9];                //a[i]为1表示第i行上尚未放皇后
    bool b[15];               //b[i]为1表示第i条斜对角线上尚未放皇后(斜对角线指的是"/"状对角线,该对角线上各点的行列号之和i+j为一个常数)
    bool c[15];               //c[i]为1表示第i条反斜对角线上尚未放皇后(反斜对角线指的是"\"状对角线,该对角线上各点的行列号之差i-j为一个常数)。
    int num=0;                //计数器,用于计算方法总数
     class bahuanghou
    {
         int i;
     public:
         bahuanghou(int x)
         {
         i=x;
         }
    void solve(int);
    };
     void bahuanghou::solve(int i)
    {
    int j;
    for(j=1;j<9;j++)
    {
        if(a[j]&&b[i+j-2]&&c[i-j+7])      //用于判断并实现:如果在第j行的第i列上放置皇后安全的话,则将一枚皇后放置到那儿。
           {
             LineNum[i]=j;                   //记录皇后位置
             a[j]=false;
             b[i+j-2]=false;
             c[i-j+7]=false;
             solve(i+1);
             a[j]=true;
             b[i+j-2]=true;
             c[i-j+7]=true;
           }
    }
     if(i>8)                          //摆放皇后之后,若i=8即已放满时则递归出口;否则通过solve(i+1);进行递归调用。
       {
        num++;
        for(int m=1; m<9; m++)
            {
                for(int n=1; n<9; n++)
                {
                    if(LineNum[m] == n)
                        cout<<" Q";
                    else
                        cout<<" +";
                }
                cout<<endl;
            }
    
        for(int m=1; m<9; m++)
            {
                for(int n=1; n<9; n++)
                {
                    if(LineNum[m] == n)
                    {
                    cout<<"("<<m<<","<<n<<")"<<"\t";
                    }
                }
            }
        cout<<endl;
        //    system("pause"); //暂停以查看结果
     }
    }
    int main()
    {
        bahuanghou huanghou(1);
        int i;
    for(i=0;i<9;i++)         //初始化一个"空棋盘"
    {
      a[i]=true;
    }
    for(i=0;i<15;i++)
    {
      b[i]=true;
      c[i]=true;
    }
      huanghou.solve(1);              //第1列开始的连续8列上均放上皇后
      cout<<"一共有"<<num<<"种方法。"<<endl;
      return 0;
    }
  • 相关阅读:
    前端提示“页面正在载入”的功能实现
    JSON那些事
    如何让nodejs同步操作
    nodejs的一些局限
    《javascript高级程序设计》读书笔记——作用域
    svn教程
    从雷军谈小米中的一些思考
    云Vps安全设置
    不同服务器数据库之间的数据操作
    C#语言的Excel文件导入导出
  • 原文地址:https://www.cnblogs.com/bq12345/p/3011265.html
Copyright © 2011-2022 走看看