| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 832 人关注过本帖, 1 人收藏
标题:求助大家,这段C++程序我找不到错哪了,运行提示main函数那段有错。
只看楼主 加入收藏
歪狗狗
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2011-9-26
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:3 
求助大家,这段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;
}
搜索更多相关主题的帖子: 声明 private include 对角线 
2011-09-26 21:12
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:7 
Timer objTimer;
Timer类哪来的。
2011-09-26 22:48
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:7 
程序代码:
#include <cstdlib>
#include <iostream> 
#include<ctime>

using namespace std;
//定时器类Timer
class Timer
{
private:
    clock_t starttime;
public:
    Timer();
    ~Timer(void){};
    double ElapsedTime();
    void reset();
};
Timer::Timer()
{
    starttime=clock();
}
double Timer::ElapsedTime()
{
    clock_t endtime=clock();
    return(double)(endtime-starttime)/(double)CLK_TCK;
}
void Timer::reset()
{
    starttime=clock();
}

//皇后问题类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;
}
自己添加一个Timer类
程序代码:
//定时器类Timer
class Timer
{
private:
    clock_t starttime;
public:
    Timer();
    ~Timer(void){};
    double ElapsedTime();
    void reset();
};
Timer::Timer()
{
    starttime=clock();
}
double Timer::ElapsedTime()
{
    clock_t endtime=clock();
    return(double)(endtime-starttime)/(double)CLK_TCK;
}
void Timer::reset()
{
    starttime=clock();
}

并添加头文件#include<ctime>

[ 本帖最后由 laznrbfe 于 2011-9-30 23:15 编辑 ]
2011-09-30 23:12
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:7 
直接给出编译错误信息,你还指望别人仔细看代码?
2011-10-01 12:04
快速回复:求助大家,这段C++程序我找不到错哪了,运行提示main函数那段有错。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036509 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved