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;
    }
  • 相关阅读:
    Linux下忘记MySQL密码的解决办法
    Jenkins——为什么使用持续集成?
    JBoss7部署EJB连接MySQL
    同一进程中的线程有哪些资源可以共享(转)
    基于ssh开发web项目-用户登录流程
    mysql-5.6.16安装流程
    Spring学习笔记
    Hibernate持久化对象状态、转换方法和操作步骤
    Hibernate配置文件与关联映射介绍
    Java的hashCode方法
  • 原文地址:https://www.cnblogs.com/bq12345/p/3011265.html
Copyright © 2011-2022 走看看