n皇后有关问题 求查错

n皇后问题 求查错!
C/C++ code

#include <iostream>
#include <stdio.h>
#include <stdlib.h> 
#include <queue>
#include <cmath>
using namespace std;

bool CanPos(int *pos, int level, int i)
{
    for (int j = 0; j < level; j++)
    {
        if (abs(pos[j] - i) == abs(j - level) || (pos[j] == i))
        {//处在同一斜行或者同一列的,排除  
            return false;
        }
    }
    return true;
}
int * GetNQueensPos(int n)
{
    int *pos = new int[n];//数组 pos[j]表示第j行的第几列,从0开始。 
    int level = 0;
    queue<int *> *QPos = new queue<int *>();//列的队 
    queue<int> *QLevel = new queue<int>();//行的队 

    while (true)
    {
        if (level == n)    
        {
            break;
        }
        for (int i = 1; i <= n; i++)
        {
            if (CanPos(pos, level, i))//满足条件 
            {
                pos[level] = i;//第i列的位置记下来 
                QPos->push(pos); 
                QLevel->push(level + 1);//符号条件的位置入队。 
                break;
            }
        }
        pos = QPos->front();
        QPos->pop();
        level = QLevel->front();
        QLevel->pop();        //出队。 
    }

    return pos;
}

int main()
{
        int n;
        cout << "请输入皇后的个数:" << endl; 
        scanf ("%d", &n);
        int *pos = GetNQueensPos(n);
        cout << "放置方案:"<< endl; 
        for (int i = 0; i < n; i++)
        {
            cout << pos[i] << " ";
        }
        cout << endl; 
        system("pause");
        return 0;   
}




该段代码 只能 在5的时候 

正确运行 

n!=5 的时候都出现错误


求解答。

------解决方案--------------------
我对楼主这程序表示强烈的怀疑。你用队列存储数组的地址??还push,pop的,有什么意思呢?这个地址又不会变。先mark下。等下回来仔细看。
------解决方案--------------------
我上面的程序已经给你改了,另外这里队列没什么用可以直接删掉,
这是没有队列的
C/C++ code

#include <iostream>
#include <stdio.h>
#include <stdlib.h> 
#include <queue>
#include <cmath>
using namespace std;

bool CanPos(int *pos, int level, int i)
{
    for (int j = 0; j < level; j++)
    {
        if (abs(pos[j] - i) == abs(j - level) || (pos[j] == i))
        {//处在同一斜行或者同一列的,排除  
            return false;
        }
    }
    return true;
}
int * GetNQueensPos(int n)
{
    int *pos = new int[n];//数组 pos[j]表示第j行的第几列,从0开始。 
    int level = 0;
    int i=1;

    while (true)
    {
        if (level == n || level <0)    
        {
            break;
        }
        for (; i <= n; i++)
        {
            if (CanPos(pos, level, i))//满足条件 
            {
                pos[level++] = i;//第i列的位置记下来 
                break;
            }
        }
        if(i>n)
        {
            level--;
            i=pos[level]+1;
            continue;
        }
        i=1;
     //出队。 
    }

    return pos;
}

int main()
{
        int n;
        cout << "请输入皇后的个数:" << endl; 
        scanf ("%d", &n);
        int *pos = GetNQueensPos(n);
        cout << "放置方案:"<< endl; 
        for (int i = 0; i < n; i++)
        {
            cout << pos[i] << " ";
        }
        cout << endl; 
        system("pause");
        return 0;   
}

------解决方案--------------------
C/C++ code

#include "iostream"
using namespace std;
 
//N皇后
#define N 8
 
//que[k]表示第k行的皇后放置的列
int que[N];
 
//检测第k行的皇后位置摆放是否正确
//不能和前k-1行的皇后在同一列,也不能在一条斜线上
bool canPlace(int k)
{
    for (int i=0; i<k; i++)
    {
        if ((que[i] == que[k]) || (abs(que[i] - que[k]) == k-i) )
            return false;
    }
 
    return true;
}
 
 
void Print()
{
    for (int i=0; i<N; i++)
    {
        for (int k = 0; k<N; k++)
        {
            if (que[i] == k)
                cout<<"Q";
            else
                cout<<"B";
        }
        cout<<endl;
    }
 
    cout<<"-------------------------------------"<<endl;
}
 
//N皇后回溯
void queen(int k)
{
    //N个皇后摆放完毕,输出结果
    if (k == N)
        Print();
 
    else
    {
        for (int j=0; j<N; j++)
        {
            //将第k行的皇后放在第j列
            que[k] = j;
 
            if (canPlace(k))
                queen(k+1);
        }
    }
}
 
int main(int argc, char *argv[])
{
    queen(0);
 
    getchar();
}