吃光一座城 2015-01-10 00:26 采纳率: 0%
浏览 2596

使用列队分支界限法解决n皇后问题,只能输入5,其他数字老是出现图中的错误,求大神解决。

#include
#include
#include
#include
using namespace std;![图片说明

//定义一个队列
void NQueens();
//定义该皇后可以存在的位置
bool CanPos(int *pos, int level, int i);
//得到N在队列中的位置
int * GetNQueensPos(int n);

int main()
{
NQueens();
}
//该方法用于获取当前N皇后应该在哪个合适的位置
int * GetNQueensPos(int n)
{
//通过创建一个数组用于存放N皇后的大小
int *pos = new int[n];
//设置当前的行数默认为O
int level = 0;

//使用队列式保存N皇后在哪个行数和N皇后在行数的哪个具体位置
queue<int*> *QPos = new queue<int*>();
queue<int> *QLevel = new queue<int>();

while (true)
{
    //N皇后的个数超过行数,则退出该循环
    if (level == n)
    {
        break;
    }
    //通过for循环判断N皇后在哪行哪列合适
    for (int i = 1; i <=n; ++i)
    {
        //N皇后在某个位置是否合适的结果判断出具体可以放的合适的位置
        if (CanPos(pos, level, i))
        {
            //将第i个合适的皇后放置在指定的行数上
            pos[level] = i;
            //将合适的位置推进队列中
            QPos->push(pos);
            //将当前合适的行号推进队列中
            QLevel->push(level + 1);
            break;
        }
    }
    //将当前的位置向前走一位
    pos = QPos->front();
    QPos->pop();
    //将当前的行号向前走一位
    level = QLevel->front();
    QLevel->pop();
}
//返回该皇后合适的位置
return pos;

}

//该方法可以实现得到N皇后可以放置的位置是否合适
bool CanPos(int *pos, int level, int i)
{
//通过一个for循环判断N皇后是否不符合要求,符合则返回true,反之亦然
for (int j = 0; j < level; ++j)
{
if (abs(pos[j] - i) == abs(j - level) || (pos[j] == i))
{
return false;
}
}
return true;
}

//用于main方法调用并返回找到的合适的结果
void NQueens()
{
int n;
cout<<"请输入N皇后个数n:"< cin>>n;

    //通过循环的方式将符合条件的皇后位置输出来
    int *pos = GetNQueensPos(n);
    cout<<"N个皇后放置的情况如下:"<<endl;
    for (int i = 0; i < n; ++i)
    {
        cout << pos[i] << " ";
    }
    cout << endl;

}
图片说明](https://img-ask.csdn.net/upload/201501/10/1420849365_69472.png)

详细错误是

****请输入N皇后个数n:
6

Process returned -1073741819 (0xC0000005) execution time : 5.289 s
Press any key to continue.****

  • 写回答

1条回答 默认 最新

  • shiter 人工智能领域优质创作者 2015-01-11 06:21
    关注

    你这个代码贴完整再看看。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答