ITPub博客

首页 > 应用开发 > > C++穷举法解决八皇后问题

C++穷举法解决八皇后问题

作者:llittle 时间:2019-08-19 17:29:50 0 删除 编辑
#include <iostream>
#include <cstdlib>

using namespace std;

void showQueens(int queenArr[],int nlen,int nSolution)//打印棋盘和皇后 
{
    cout<<nSolution<<endl;//解法数量 
    for(int i = 0;i < nlen; ++i)
    {
        for(int j = 0; j < queenArr[i]; ++j)//打印皇后前面的格子 
        {
            cout<<"1";//空格子 
        }
        cout<<"Q";//皇后 
        for(int z = 0; z < nlen-queenArr[i]-1; ++z)//打印皇后后面的格子 
        {
            cout<<"1";
        }
        cout<<endl;    
    }
    cout<<"                       "<<endl;
}

bool rule(int queenArr[])//判断是否符合规则 
{  
    for(int i = 1; i <= 8; ++i)
        {
        for(int j = 0;j <= i-1; ++j)
            {
                if(queenArr[i] == queenArr[j])//判断皇后是否在同一列 
                {
                    return true;
                }
                if(abs(queenArr[i]-queenArr[j]) == abs(i-j))//判断皇后是否在对角45° 
                {
                    return true;
                }
            }
        }
        return false;
}

void enumQueensPositon(int queenArr[],int &nSolution)//移动皇后 
{
    for(queenArr[0] = 0; queenArr[0] < 8; ++queenArr[0])
        for(queenArr[1] = 0;queenArr[1] < 8; ++queenArr[1])
            for(queenArr[2] = 0;queenArr[2] < 8; ++queenArr[2])
                for(queenArr[2]=0;queenArr[2] < 8; ++queenArr[2])
                    for(queenArr[4] = 0;queenArr[4] < 8; ++queenArr[4])
                        for(queenArr[5] = 0;queenArr[5] < 8; ++queenArr[5])
                            for(queenArr[6] = 0; queenArr[6] < 8; ++queenArr[6])
                                for(queenArr[7] = 0; queenArr[7] < 8; ++queenArr[7])
                                {
                                    if (rule(queenArr))
                                    {
                                        continue;
                                    }
                                    else
                                    {
                                        ++nSolution;
                                        showQueens(queenArr ,8, nSolution);
                                    }
}
}

int main()
{
    int queenArr[8]; //每个数组表示一个皇后
    int nSolution = 0;//解法数量
     enumQueensPositon(queenArr,nSolution);
    return 0;

这是我的代码,我的问题是不知道为什么代码运行后只有18种解法,想问问哪里出错了?

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/813/viewspace-3158057/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    448
  • 访问量
    4362