首页新闻招聘找找看知识库

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

0
悬赏园豆:50 [待解决问题]
#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种解法,想问问哪里出错了?

C++
gh6883123的主页 gh6883123 | 初学一级 | 园豆:152
提问于:2017-06-19 17:10
< >
分享
   您需要登录以后才能回答,未注册用户请先注册