请问各位大师,程序应该怎样改才能运行稍大一点的皇后数?额外的申请空间该怎样解决?拜托大家帮帮忙

#include
#include
using namespace std;

int n;

class ResultTreeNode
{
public:
int *result; //存储结果,result[i]=k 表示第 i+1 排第 k+1 个位置摆个皇后
int currRow; //当前记录的结果到了第几行 : 1~n
~ResultTreeNode()
{
if (result!=NULL)
{
delete result;
}
}
ResultTreeNode *ResultAfterPutHere(int pos)
{
int row,i;
ResultTreeNode *r;
for (row=0;row {
if (pos==result[row] //摆在了同一列
|| currRow-row == pos-result[row] //同摆在了右斜线
|| currRow-row == -pos+result[row] //同摆在了左斜线
) //也就是存在冲突的皇后
{
return NULL; //那么就返回空
}
}
//不存在冲突的皇后,在此处摆上一个皇后,返回新的结果
r = new ResultTreeNode;
r->result = new int[n];
r->currRow = currRow+1;
for (i=0;i {//复制前面的皇后摆放情况
r->result[i] = result[i];
}
r->result[currRow] = pos;//摆上新的皇后
return r;
}
};

int main()
{
queue list;
int i,*p_i;
ResultTreeNode *rtn,*rtnNew;
scanf("%d",&n);
for (i=0;i {//把第一排的n种摆法都放进队列
rtn = new ResultTreeNode;
rtn->result = new int[n];
rtn->result[0] = i;
rtn->currRow = 1;
list.push(rtn);
}
//处理每一种情况,直到找出结果
while (!list.empty())
{
rtn = list.front(); //取出排在最前面的家伙
list.pop();
for (i=0;i {//在下一排逐个摆放皇后并检查是否冲突
rtnNew = rtn->ResultAfterPutHere(i);
if (rtnNew!=NULL)
{//不冲突
if (rtnNew->currRow == n) //看是否已经摆完了N皇后
{//摆完了
//输出结果
printf("%d",rtnNew->result[0]+1);
for (i=1;icurrRow;i++)
printf(" %d",rtnNew->result[i]+1);
printf("\n");
//清理内存
delete rtn;
delete rtnNew;
while (!list.empty())
{
delete list.front();
list.pop();
}
return 0; //结束算法
}
//没有摆完就进队列继续摆
list.push(rtnNew);
}
}
delete rtn;
rtn = NULL;
}
return 0;
}

你是要动态的增加new来的空间吗?如果是这样的话,C++没有提供对应的方法,只能另外申请更大的空间然后将源空间的数据复制到新空间,最后释放掉源空间的数据。在C语言中调用malloc动态得到的空间可以realloc以增加存储空间,但是malloc/free再C++中调用时由于没有调用构造/析构函数,因此调用需要满足一定条件,即用malloc动态分配内存的对象必须是所谓的plain object。