使用列队分支界限法解决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.****

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