求助大家,这段C++程序我找不到错哪了,运行提示main函数那段有错。
#include <cstdlib>#include <iostream>
using namespace std;
//皇后问题类Queen声明
class Queen
{
private:
//数据成员:
int n; //皇后数
bool * row; //行是否有皇后
bool * diag; //主对角线是否有皇后
bool * backDiag; //反对角线是否有皇后
int * x; //皇后问题的解
//辅助函数
void BackTracking(int c); //用回溯法递归求解皇后问题
void Show(); //显示解
public:
//方法声明:
Queen(int num=8); //构造函数
virtual~Queen(); //析构函数
void Run(){BackTracking(1);} //运行求解皇后问题
};
//皇后问题类Queen的实现部分
void Queen::BackTracking(int c) //前c-1个皇后已放置后,为第c个皇后选择合适的位置
{
if(c>n) Show(); //c>n表示第1~n个皇后已放置好,显示解
else
{
for(int r=1;r<=n;r++)
{ //第c个皇后所放置的行
if(!row[r] && !diag[n-c+r] && !backDiag[r+c-1])
{ //位置(r,c)所在的行,对角线没放置有皇后,在位置(r,c)放置第c个皇后
row[r]=diag[n-c+r]=backDiag[r+c-1]=true; //表示位置(r,c)已有皇后
x[c]=r; //表示第c个皇后所放置的行
BackTracking(c+1); //试探第c+1个皇后所放置的位置
row[r]=diag[n-c+r]=backDiag[r+c-1]=false; //释放位置(r,c),进行回溯
}
}
}
}
void Queen::Show() //显示解
{
static int num=0; //表示当前已求得解的个数
cout<<"第"<<++num<<"个解:";
cout<<"("<<x[1]; //先显示"(x1"
for(int i=2;i<=n;i++)
cout<<","<<x[i]; //显示",x2,x3,...,xn"
cout<<")"<<endl; //显示")"
}
Queen::Queen(int num) //初始化皇后问题
{
n=num; //皇后数
row=new bool[n+1]; //分配行所占用空间
diag=new bool[2 * n]; //分配对角线所占用空间
backDiag=new bool[2 * n]; //分配反对角线所占用空间
x=new int[n+1]; //分配解所占用空间
int i; //临时变量
//赋初值
for (i=1;i<=n;i++) row[i]=false; //表示所有行没放有皇后
for (i=1;i<2*n;i++) diag[i]=false; //表示所有对角线没放有皇后
for (i=1;i<2*n;i++) backDiag[i]=false; //表示所有反对角线没放有皇后
}
Queen::~Queen() //析构函数
{
delete[]row; //释放行所占用空间
delete[]diag; //释放对角线所占用空间
delete[]backDiag; //释放反对角线所占用空间
delete[]x; //释放解所占用空间
}
int main(void) //主函数main(void)
{
Timer objTimer; //计时器对象
Queen objQueen(8); //8皇后问题对象
objQueen.Run(); //运行求解皇后问题
cout<<"用时"<<objTimer.ElapsedTime()<<"秒."<<endl;
system("PAUSE"); //调用数据库system()
return 0;
}