为什么打印不出来92个 而且vc和vs2010打印出来的不一致




#include <iostream>
#include <iomanip>
using namespace std;
void setCondition(bool *m,int n);//对状态进行设置
void row(bool *r,int i,int j,int n); //判断该行是否可以放皇后
void xie(bool *r,int i,int j,int n);
void obxie(bool *r,int i,int j,int n);
void obRow(bool *r,int i,int j,int n);//清除上一组数据
void obDiagonal(bool *d,int i,int j,int n);//清除上一组数据
void diagonal(bool *d,int i,int j,int n);//判断此正反斜对角线是否可以放皇后
void solve(bool *r,bool *d,bool *o,int i,int j,int *t,int n);//进行皇后放置
void print(int *t,int n );//进行打印
int z=0;
int main()

    int i,j,n;

    cout<<"请输入皇后阶数!"<<endl;
    cin>>n;

    int  *t=new int  [n];
    bool *r=new bool [n];
    bool *d=new bool [2*n-1];
    bool *o=new bool [2*n-1];

    setCondition(r,n);
    setCondition(d,2*n-1);
    setCondition(o,2*n-1);

    i=0; j=0;
    solve(r,d,o,i,j,t,n);

    delete []t;
    delete []r;
    delete []d;
    delete []o;


    return 0;
}
void xie(bool *d,int i,int j,int n)
{
    d[j+i]= false;
}
void obxie(bool *d,int i,int j,int n)
{
    d[j+i]= true;
}
void setCondition(bool *m,int n)
{
    int i;
    for (i=0;i<n;i++)
    {
        m[i]=true;
    }
}
void row(bool *r,int i,int j,int n)
{
    r[i]=false; 
}
void obRow(bool *r,int i,int j,int n)
{
    r[i]=true; 
}
void diagonal(bool *d,int i,int j,int n)
{
    d[i-j+n-1]= false;
}
void obDiagonal(bool *d,int i,int j,int n)
{
    d[i-j+n-1]= true;
}
void print(int *t,int n )
{
    int i,j;

    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            if (i==t[j])
            {
                cout<<setw(3)<<'Q';
            }
            else cout<<setw(3)<<'+';
        }

        cout<<endl;
    }
    z++;
    cout<<z<<endl;
}
void solve(bool *r,bool *d,bool *o,int i,int j,int *t,int n)
{
    if(i==n&&j==0) exit(0);

    if (j==n)
    {
        cout<<endl;
        print(t,n);

        obDiagonal(d,t[j-1],j-1,n);
        obxie(o,t[j-1],j-1,n);
        obRow(r,t[j-1],j-1,n);
        solve(r,d,o,t[j-1]+1,j-1,t,n);
    }

    if (i==n)
    {
        obDiagonal(d,t[j-1],j-1,n);
        obxie(o,t[j-1],j-1,n);
        obRow(r,t[j-1],j-1,n);
        solve(r,d,o,t[j-1]+1,j-1,t,n);

    }
    if (r[i]&&d[i-j+n-1]&&o[i+j])
    {
        t[j]=i;
        diagonal(d,i,j,n);
        xie(o,i,j,n);
        row(r,i,j,n);

        solve(r,d,o,0,j+1,t,n);
    }
    else
    {
        solve(r,d,o,i+1,j,t,n);
    }

}

[code=c]
请填写代码
[/code][code=c]
请填写代码
[/code][code=c]
请填写代码
[/code][code=c]
请填写代码
[/code][code=c]
请填写代码
[/code][code=c]
请填写代码
[/code][code=c]
请填写代码
[/code][code=c]
请填写代码
[/code][code=c]
请填写代码
[/code][code=c]
请填写代码
[/code]