吃光一座城 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 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)