qq_21494941 2019-04-13 17:09 采纳率: 100%
浏览 1518
已采纳

小菜鸟快哭了。error C2365: “free”: 重定义;以前的定义是“函数”

图片说明


下面贴个完整的程序段
int i,j,k,n; //循环变量

void BacktoHome();
void Introduction();
void SpecialOne();
void SpecialMost();
void SpecialLeast();
void PrintAll();
void Away();

void Initial(void)
{
    cout<<endl<<endl<<endl;
    cout<<"                              八 皇 后 问 题                               \n"<<flush;
    cout<<"  -------------------------------------------------------------------------\n"<<flush;
    cout<<"                                                    制作人:lzh         \n\n\n"<<flush;
    cout<<"   请选择以下功能:                                                      \n\n"<<flush;
    cout<<"      1.问题简介                                                         \n\n"<<flush;
    cout<<"      2.指定第一个皇后的位置情况下有几种方案                             \n\n"<<flush;
    cout<<"      3.在什么位置固定一个皇后,方案的数量最多?具体有哪些方案?         \n\n"<<flush;
    cout<<"      4.在什么位置固定一个皇后,方案的数量最少?具体有哪些方案?         \n\n"<<flush;
    cout<<"      5.八皇后问题共有几种解决方案?                                     \n\n"<<flush;
    cout<<"      6.退出                                                             \n\n"<<flush;
    cout<<"      请输入你的选择:";
    int choice,check=-1;
    do{
        cin>>choice;cin.ignore(80,'\n');
        switch(choice){
            case 1: Introduction(); break;
            case 2: SpecialOne(); break;
            case 3: SpecialMost(); break;
            case 4: SpecialLeast(); break;
            case 5: PrintAll(); break;
            case 6: Away(); break;
            default: cout<<"你的输入有误,请重新输入!\n";
        }
    }while(check);
}

enum States { used, free };

class Stack {
    int data[8];
    int Top;
public:
    Stack() { Top = 0; }
    ~Stack() { }
    int Size() { return Top; }
    bool Push(int);
    bool Pop(int &);
    bool StackTop(int &);
    friend void Empty(Stack &); //置空栈内数据, 在Solve函数执行前使用
}rowStack;

bool Stack::Push(int d) 
{
    if (Top == 8)
    return false;
    else {
        data[Top] = d;
        Top++;
        return true;
    }
}

bool Stack::Pop(int &d) 
{
    if (!Top)
    return false;
    else {
        Top--;
        d = data[Top];
        return true;
    }
}

bool Stack::StackTop(int &d)
{
    if (!Top)
    return false;
    else {
        d = data[Top-1];
        return true;
    }
}

class Board    //一盘棋8*8
{
    char board[8][8];
    States Rows[8], DiagsLR[15], DiagsRL[15];   //行,左右斜线
    char PrintBoard[100][8][8]; //输出的棋盘
public:
    int nNum;   //保存一组解的数目
    static int AllNum;  //保存所有方案的数目
    Board();
    bool isAttacked(int, int);  //处理冲突
    void PlaceQueen(int, int);
    void RemoveQueen(int, int);
    void Print(int,int);    //前一个参数保存一行输出解的个数,后一个参数保存共输出解的数目
    void SaveBoard();   //解决一组解后保存到PrintBoard数组中
    void SaveAll();     //保存所有八皇后问题的解
    friend void Empty(Board &);     //置空栈内数据, 在Solve函数执行前使用
}myBoard;

int Board::AllNum;

Board::Board()   //构造函数,初始化为空
{
   for(int i=0; i<8; i++)
   {
      Rows[i] = free;
      for(int j=0; j<8; j++)  board[i][j] = '.';
   }
   for(int k=0; k<15; k++)  DiagsLR[k] = DiagsRL[k] = free;
}

bool Board::isAttacked(int row, int col)  //是否冲突,是返回TRUE,否返回FALSE
{
   int diagLR = col-row+7;
   int diagRL = row+col;
   if (Rows[row] == used || DiagsLR[diagLR] == used || DiagsRL[diagRL] == used)
      return true;
   return false;
}

void Board::PlaceQueen(int row, int col) //放皇后
{
   int diagLR = col-row+7; //左对角线元素
   int diagRL = row+col;  //右对角线元素
   board[row][col] = 'Q';
   Rows[row] = used;
   DiagsLR[diagLR] = used;
   DiagsRL[diagRL] = used;
}

void Board::RemoveQueen(int row, int col)  //移去皇后
{
   int diagLR = col-row+7;
   int diagRL = row+col;
   board[row][col] = '.';
   Rows[row] = free;
   DiagsLR[diagLR] = free;
   DiagsRL[diagRL] = free;
}

void Board::Print(int c,int num)  
{
    if(c==N){    //输出对应的所有解,一行排列五组
        for(i=0;i<num;i++){
            if(num-i<N) break;  //当剩余解数大于五组可以并排显示时
            for(j=0;j<8;j++){
                for(n=0;n<N;n++){
                    for(k=0;k<8;k++)
                        cout<<PrintBoard[i+n][j][k]<<' '<<flush;
                    cout<<'\t';
                }
                cout<<'\n';
            }   //至此已经完成输出一排五组解
            i+=N-1; //跳过已输出的五组解
            cout<<"按任意键继续. . .\n"<<flush;
            getch();
        }
        if(num-i<N&&(num-i)!=0) //当剩余方案不足五个且多于零个时
        {
            int n=i;
            for(j=0;j<8;j++){
                while(n!=num)
                {
                    for(k=0;k<8;k++)
                        cout<<PrintBoard[n][j][k]<<' '<<flush;
                    cout<<'\t';
                    n++;
                }
                cout<<'\n';
                n=i;    //使n指向第i个解的位置
            }
        }
        cout<<"输出完毕,共输出了"<<num<<"组方案\n"<<flush;
        cout<<"按任意键返回\n"<<flush;
        getch();
        BacktoHome();
    }
    if(c==1){
        for(i=0;i<num;i++){
            for(j=0;j<8;j++){
                for(k=0;k<8;k++)
                    cout<<PrintBoard[i][j][k]<<' ';
                cout<<'\n';
            }
            cout<<"按任意键继续\n";
            getch();

        }
        cout<<"输出完毕,共输出了"<<num<<"组方案\n";
        cout<<"按任意键返回\n";
        getch();
        BacktoHome();
    }
}

void Empty(Board &myBoard)  //置空栈内数据,以便下一次Solve函数的执行
{
    for(int i=0; i<8; i++)
   {
      myBoard.Rows[i] = free;
      for(int j=0; j<8; j++)  myBoard.board[i][j] = '.';
   }
   for(int k=0; k<15; k++) 
       myBoard.DiagsLR[k] = myBoard.DiagsRL[k] = free;
}
void Empty(Stack &rowStack) //置空栈内数据,以便下一次Solve函数的执行
{
    rowStack.Top = 0;
}

void Board::SaveBoard()
{
    for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
            PrintBoard[nNum][i][j]=board[i][j];
    nNum++;
}

void Board::SaveAll()
{
    for(int i=0;i<8;i++)
        for(int j=0;j<8;j++)
            PrintBoard[Board::AllNum][i][j]=board[i][j];
        Board::AllNum++;
}

void Solve(int qRow,int qCol)   //实际处理八皇后置放问题
{   
    int row,col,exitLoop,attacked;
    myBoard.nNum=0; //每执行一次Solve函数,先将nNum置空,并在函数执行后及时保存nNum的值
    Empty(myBoard);
    Empty(rowStack);//置空栈内数据,以便下一次Solve函数的执行
    myBoard.PlaceQueen(qRow,qCol);
    if (qCol == 0)  col = 1;
    else    col = 0;   
    row = 0;
    do 
    {
        while(row < 8)  //超界
        {
            exitLoop = 0;
            if (!(attacked = myBoard.isAttacked(row,col)))   //若无皇后,条件成立
            {
                myBoard.PlaceQueen(row,col);      //放皇后     
                rowStack.Push(row);             //入栈            
                row = 0;            
                col++;          
                if (col == qCol)
                col++;
                exitLoop = 1;
            }     
            if (exitLoop)    break;    //找到退出本层循环
            else  row++;      // 到下一行
        }
            if (col == 8)
        {   
            myBoard.SaveBoard();
            row = 8;     
        }
        if (row == 8)      
        {
            rowStack.Pop(row);  col--;      //到前一列
            if (col == qCol)    col--;
            myBoard.RemoveQueen(row,col);   //移去皇后
            row++;  //找下一个位置
        }
    }while(col>=0);
}

void SolveAll()
{
    for(i=0;i<7;i++){
        int row=i,col=0,exitLoop,attacked;
        Empty(myBoard);
        Empty(rowStack);//置空栈内数据,以便下一次Solve函数的执行
        do 
        {
            while(row < 8)  //超界
            {
                exitLoop = 0;
                if (!(attacked = myBoard.isAttacked(row,col)))   //若无皇后,条件成立
                {
                    myBoard.PlaceQueen(row,col);      //放皇后     
                    rowStack.Push(row);             //入栈            
                    row = 0;            
                    col++;          
                    exitLoop = 1;
                }     
                if (exitLoop)    break;    //找到退出本层循环
                else  row++;      // 到下一行
                }
                if (col == 8)
                {   
                    myBoard.SaveAll();      
                    row = 8;     
                }
                if (row == 8)      
                {
                    rowStack.Pop(row);  
                    col--;      //到前一列
                    myBoard.RemoveQueen(row,col);   //移去皇后
                    row++;  //找下一个位置
                }
        }while(col>=0);
    }
}

void BacktoHome()
{
//  system("cls");
    Initial();

}

void SpecialOne()
{   
//  system("cls");
    int row,col;
    do{
        cout<<"输入第一个皇后的位置(1~8):\n行坐标:";
        cin>>row;
        cout<<"列坐标:";
        cin>>col;
        if(!(row<=8&&row>=1&&col<=8&&col>=1))
            cout<<"你的输入有误,请重新输入:\n";
    }while(!(row<=8&&row>=1&&col<=8&&col>=1));
    Solve(row-1,col-1);
    cout<<"固定该位置的皇后后共有"<<myBoard.nNum<<"组方案\n";
    cout<<"是否输出所有这些方案?(Y/N)";
    char c='a';
    while(c){
        cin>>c;cin.ignore(80,'\n');
        if(c=='y'||'Y'){
            myBoard.Print(N,myBoard.nNum);
            break;
        }
        else if(c=='n'||'N'){
            BacktoHome();
            break;
        }
        else    cout<<"你的输入有误,请重新输入!\n";
    }
}

void SpecialMost()
{
//  system("cls");
    int qRow,qCol;  //储存最多方案解皇后的位置  
    int row,col=-1;
    int max=0; //储存最多方案解的个数
    cout<<"可以把皇后固定在某一列上来查找最多解\n";
    cout<<"把皇后固定在哪一列?";
    do{
        cin>>col; cin.ignore(80,'\n');  
        if(!(col<=8&&col>=1))
            cout<<"你的输入有误,请重新输入!";
    }while(!(col<=8&&col>=1));
    for(row=0;row<8;row++){
        Solve(row,col-1);
        if(max<myBoard.nNum){
            max=myBoard.nNum;       
            qRow=row;qCol=col;
        }
    }
    cout<<"\n在你输入的这一列位置上,八皇后问题方案解最多的有"<<max<<"种\n"<<flush;
    cout<<"它的位置在第"<<qRow+1<<"行,"<<"第"<<qCol<<"列\n"<<flush;
    cout<<"是否输出该情况下的所有方案?(Y/N)"<<flush;
    char c;
    do{
        cin>>c;//cin.ignore(80,'\n');
        if(c=='Y'||'y'){
            myBoard.Print(N,max);
            break;
        }
        else if(c=='N'||'n'){
            BacktoHome();
            break;
            }
              else cout<<"你的输入有误,请重新输入!";
    }while(c);
}

void SpecialLeast()
{
//  system("cls");
    int qRow,qCol;  //储存最少方案解皇后的位置  
    int row,col=-1;
    int min=100; //储存最少方案解的个数
    cout<<"可以把皇后固定在某一列上来查找最少解\n";
    cout<<"把皇后固定在哪一列?";
    do{
        cin>>col; //cin.ignore(80,'\n');    
        if(!(col<=8&&col>=1))
            cout<<"你的输入有误,请重新输入!";
    }while(!(col<=8&&col>=1));
    for(row=0;row<8;row++){
        Solve(row,col-1);
        if(min>myBoard.nNum){
            min=myBoard.nNum;       
            qRow=row;qCol=col;
        }
    }
    cout<<"在你输入的这一列位置上,八皇后问题方案解最少的有"<<min<<"种\n"<<flush;
    cout<<"它的位置在第"<<qRow+1<<"行,"<<"第"<<qCol<<"列\n"<<flush;
    cout<<"是否输出该情况下的所有方案?(Y/N)"<<flush;
    char c;
    do{
        cin>>c;//cin.ignore(80,'\n');
        if(c=='Y'||'y'){
            myBoard.Print(N,min);
            break;
        }
        else if(c=='N'||'n'){
            BacktoHome();
            break;
            }
              else cout<<"你的输入有误,请重新输入!";
    }while(c);
}

void PrintAll()
{
    SolveAll();
    cout<<"八皇后问题共有"<<Board::AllNum<<"种解方案"<<endl<<flush;
    cout<<"是否输出所有这些解?(Y/N)"<<flush;
    char c;
    do{
    cin>>c;
    if(c=='Y'||'y')
        myBoard.Print(N,Board::AllNum);
    else if(c=='N'||'n')
        break;
        else
            cout<<"你的输入有误,请重新输入!";
    }while(c);
    cout<<"按任意键返回";
    getch();
    BacktoHome();
}

void Introduction()
{
    cout<<"输出关于八皇后问题的介绍"<<flush;
    cout<<"按任意键返回\n"<<flush;
    getch();
    BacktoHome();
}

void Away()
{
//  system("cls");
    cout<<endl<<endl<<endl;
    cout<<"                              八 皇 后 问 题                               \n"<<flush;
    cout<<"  -------------------------------------------------------------------------\n"<<flush;
    cout<<"                                                    制作人:lzh       \n\n\n"<<flush;
    cout<<endl<<flush;
    cout<<"                                                                     "<<endl<<flush;
    cout<<"            ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~      "<<endl<<flush;
    cout<<"         *                                                      *    "<<endl<<flush; 
    cout<<"        *           谢谢你对本软件的支持   欢迎再次使用          *   "<<endl<<flush;
    cout<<"         *                                                      *    "<<endl<<flush;
    cout<<"            ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~      "<<endl<<flush;
    cout<<"\n\n\n\n\n\n\n\n\n"<<flush;
}
void main()
{
    Initial();
}
  • 写回答

1条回答

  • threenewbee 2019-04-13 17:11
    关注

    free是c/c++的关键字,换一个词。

    图片说明

    完整的程序

    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    int i,j,k,N,n; //循环变量
    
    
    void BacktoHome();
    void Introduction();
    void SpecialOne();
    void SpecialMost();
    void SpecialLeast();
    void PrintAll();
    void Away();
    
    void Initial(void)
    {
        cout<<endl<<endl<<endl;
        cout<<"                              八 皇 后 问 题                               \n"<<flush;
        cout<<"  -------------------------------------------------------------------------\n"<<flush;
        cout<<"                                                    制作人:lzh         \n\n\n"<<flush;
        cout<<"   请选择以下功能:                                                      \n\n"<<flush;
        cout<<"      1.问题简介                                                         \n\n"<<flush;
        cout<<"      2.指定第一个皇后的位置情况下有几种方案                             \n\n"<<flush;
        cout<<"      3.在什么位置固定一个皇后,方案的数量最多?具体有哪些方案?         \n\n"<<flush;
        cout<<"      4.在什么位置固定一个皇后,方案的数量最少?具体有哪些方案?         \n\n"<<flush;
        cout<<"      5.八皇后问题共有几种解决方案?                                     \n\n"<<flush;
        cout<<"      6.退出                                                             \n\n"<<flush;
        cout<<"      请输入你的选择:";
        int choice,check=-1;
        do{
            cin>>choice;cin.ignore(80,'\n');
            switch(choice){
                case 1: Introduction(); break;
                case 2: SpecialOne(); break;
                case 3: SpecialMost(); break;
                case 4: SpecialLeast(); break;
                case 5: PrintAll(); break;
                case 6: Away(); break;
                default: cout<<"你的输入有误,请重新输入!\n";
            }
        }while(check);
    }
    
    enum States { used, free1 };
    
    class Stack {
        int data[8];
        int Top;
    public:
        Stack() { Top = 0; }
        ~Stack() { }
        int Size() { return Top; }
        bool Push(int);
        bool Pop(int &);
        bool StackTop(int &);
        friend void Empty(Stack &); //置空栈内数据, 在Solve函数执行前使用
    }rowStack;
    
    bool Stack::Push(int d) 
    {
        if (Top == 8)
        return false;
        else {
            data[Top] = d;
            Top++;
            return true;
        }
    }
    
    bool Stack::Pop(int &d) 
    {
        if (!Top)
        return false;
        else {
            Top--;
            d = data[Top];
            return true;
        }
    }
    
    bool Stack::StackTop(int &d)
    {
        if (!Top)
        return false;
        else {
            d = data[Top-1];
            return true;
        }
    }
    
    class Board    //一盘棋8*8
    {
        char board[8][8];
        States Rows[8], DiagsLR[15], DiagsRL[15];   //行,左右斜线
        char PrintBoard[100][8][8]; //输出的棋盘
    public:
        int nNum;   //保存一组解的数目
        static int AllNum;  //保存所有方案的数目
        Board();
        bool isAttacked(int, int);  //处理冲突
        void PlaceQueen(int, int);
        void RemoveQueen(int, int);
        void Print(int,int);    //前一个参数保存一行输出解的个数,后一个参数保存共输出解的数目
        void SaveBoard();   //解决一组解后保存到PrintBoard数组中
        void SaveAll();     //保存所有八皇后问题的解
        friend void Empty(Board &);     //置空栈内数据, 在Solve函数执行前使用
    }myBoard;
    
    int Board::AllNum;
    
    Board::Board()   //构造函数,初始化为空
    {
       for(int i=0; i<8; i++)
       {
          Rows[i] = free1;
          for(int j=0; j<8; j++)  board[i][j] = '.';
       }
       for(int k=0; k<15; k++)  DiagsLR[k] = DiagsRL[k] = free1;
    }
    
    bool Board::isAttacked(int row, int col)  //是否冲突,是返回TRUE,否返回FALSE
    {
       int diagLR = col-row+7;
       int diagRL = row+col;
       if (Rows[row] == used || DiagsLR[diagLR] == used || DiagsRL[diagRL] == used)
          return true;
       return false;
    }
    
    void Board::PlaceQueen(int row, int col) //放皇后
    {
       int diagLR = col-row+7; //左对角线元素
       int diagRL = row+col;  //右对角线元素
       board[row][col] = 'Q';
       Rows[row] = used;
       DiagsLR[diagLR] = used;
       DiagsRL[diagRL] = used;
    }
    
    void Board::RemoveQueen(int row, int col)  //移去皇后
    {
       int diagLR = col-row+7;
       int diagRL = row+col;
       board[row][col] = '.';
       Rows[row] = free1;
       DiagsLR[diagLR] = free1;
       DiagsRL[diagRL] = free1;
    }
    
    void Board::Print(int c,int num)  
    {
        if(c==N){    //输出对应的所有解,一行排列五组
            for(i=0;i<num;i++){
                if(num-i<N) break;  //当剩余解数大于五组可以并排显示时
                for(j=0;j<8;j++){
                    for(n=0;n<N;n++){
                        for(k=0;k<8;k++)
                            cout<<PrintBoard[i+n][j][k]<<' '<<flush;
                        cout<<'\t';
                    }
                    cout<<'\n';
                }   //至此已经完成输出一排五组解
                i+=N-1; //跳过已输出的五组解
                cout<<"按任意键继续. . .\n"<<flush;
                getch();
            }
            if(num-i<N&&(num-i)!=0) //当剩余方案不足五个且多于零个时
            {
                int n=i;
                for(j=0;j<8;j++){
                    while(n!=num)
                    {
                        for(k=0;k<8;k++)
                            cout<<PrintBoard[n][j][k]<<' '<<flush;
                        cout<<'\t';
                        n++;
                    }
                    cout<<'\n';
                    n=i;    //使n指向第i个解的位置
                }
            }
            cout<<"输出完毕,共输出了"<<num<<"组方案\n"<<flush;
            cout<<"按任意键返回\n"<<flush;
            getch();
            BacktoHome();
        }
        if(c==1){
            for(i=0;i<num;i++){
                for(j=0;j<8;j++){
                    for(k=0;k<8;k++)
                        cout<<PrintBoard[i][j][k]<<' ';
                    cout<<'\n';
                }
                cout<<"按任意键继续\n";
                getch();
    
            }
            cout<<"输出完毕,共输出了"<<num<<"组方案\n";
            cout<<"按任意键返回\n";
            getch();
            BacktoHome();
        }
    }
    
    void Empty(Board &myBoard)  //置空栈内数据,以便下一次Solve函数的执行
    {
        for(int i=0; i<8; i++)
       {
          myBoard.Rows[i] = free1;
          for(int j=0; j<8; j++)  myBoard.board[i][j] = '.';
       }
       for(int k=0; k<15; k++) 
           myBoard.DiagsLR[k] = myBoard.DiagsRL[k] = free1;
    }
    void Empty(Stack &rowStack) //置空栈内数据,以便下一次Solve函数的执行
    {
        rowStack.Top = 0;
    }
    
    void Board::SaveBoard()
    {
        for(int i=0;i<8;i++)
            for(int j=0;j<8;j++)
                PrintBoard[nNum][i][j]=board[i][j];
        nNum++;
    }
    
    void Board::SaveAll()
    {
        for(int i=0;i<8;i++)
            for(int j=0;j<8;j++)
                PrintBoard[Board::AllNum][i][j]=board[i][j];
            Board::AllNum++;
    }
    
    void Solve(int qRow,int qCol)   //实际处理八皇后置放问题
    {   
        int row,col,exitLoop,attacked;
        myBoard.nNum=0; //每执行一次Solve函数,先将nNum置空,并在函数执行后及时保存nNum的值
        Empty(myBoard);
        Empty(rowStack);//置空栈内数据,以便下一次Solve函数的执行
        myBoard.PlaceQueen(qRow,qCol);
        if (qCol == 0)  col = 1;
        else    col = 0;   
        row = 0;
        do 
        {
            while(row < 8)  //超界
            {
                exitLoop = 0;
                if (!(attacked = myBoard.isAttacked(row,col)))   //若无皇后,条件成立
                {
                    myBoard.PlaceQueen(row,col);      //放皇后     
                    rowStack.Push(row);             //入栈            
                    row = 0;            
                    col++;          
                    if (col == qCol)
                    col++;
                    exitLoop = 1;
                }     
                if (exitLoop)    break;    //找到退出本层循环
                else  row++;      // 到下一行
            }
                if (col == 8)
            {   
                myBoard.SaveBoard();
                row = 8;     
            }
            if (row == 8)      
            {
                rowStack.Pop(row);  col--;      //到前一列
                if (col == qCol)    col--;
                myBoard.RemoveQueen(row,col);   //移去皇后
                row++;  //找下一个位置
            }
        }while(col>=0);
    }
    
    void SolveAll()
    {
        for(i=0;i<7;i++){
            int row=i,col=0,exitLoop,attacked;
            Empty(myBoard);
            Empty(rowStack);//置空栈内数据,以便下一次Solve函数的执行
            do 
            {
                while(row < 8)  //超界
                {
                    exitLoop = 0;
                    if (!(attacked = myBoard.isAttacked(row,col)))   //若无皇后,条件成立
                    {
                        myBoard.PlaceQueen(row,col);      //放皇后     
                        rowStack.Push(row);             //入栈            
                        row = 0;            
                        col++;          
                        exitLoop = 1;
                    }     
                    if (exitLoop)    break;    //找到退出本层循环
                    else  row++;      // 到下一行
                    }
                    if (col == 8)
                    {   
                        myBoard.SaveAll();      
                        row = 8;     
                    }
                    if (row == 8)      
                    {
                        rowStack.Pop(row);  
                        col--;      //到前一列
                        myBoard.RemoveQueen(row,col);   //移去皇后
                        row++;  //找下一个位置
                    }
            }while(col>=0);
        }
    }
    
    void BacktoHome()
    {
    //  system("cls");
        Initial();
    
    }
    
    void SpecialOne()
    {   
    //  system("cls");
        int row,col;
        do{
            cout<<"输入第一个皇后的位置(1~8):\n行坐标:";
            cin>>row;
            cout<<"列坐标:";
            cin>>col;
            if(!(row<=8&&row>=1&&col<=8&&col>=1))
                cout<<"你的输入有误,请重新输入:\n";
        }while(!(row<=8&&row>=1&&col<=8&&col>=1));
        Solve(row-1,col-1);
        cout<<"固定该位置的皇后后共有"<<myBoard.nNum<<"组方案\n";
        cout<<"是否输出所有这些方案?(Y/N)";
        char c='a';
        while(c){
            cin>>c;cin.ignore(80,'\n');
            if(c=='y'||'Y'){
                myBoard.Print(N,myBoard.nNum);
                break;
            }
            else if(c=='n'||'N'){
                BacktoHome();
                break;
            }
            else    cout<<"你的输入有误,请重新输入!\n";
        }
    }
    
    void SpecialMost()
    {
    //  system("cls");
        int qRow,qCol;  //储存最多方案解皇后的位置  
        int row,col=-1;
        int max=0; //储存最多方案解的个数
        cout<<"可以把皇后固定在某一列上来查找最多解\n";
        cout<<"把皇后固定在哪一列?";
        do{
            cin>>col; cin.ignore(80,'\n');  
            if(!(col<=8&&col>=1))
                cout<<"你的输入有误,请重新输入!";
        }while(!(col<=8&&col>=1));
        for(row=0;row<8;row++){
            Solve(row,col-1);
            if(max<myBoard.nNum){
                max=myBoard.nNum;       
                qRow=row;qCol=col;
            }
        }
        cout<<"\n在你输入的这一列位置上,八皇后问题方案解最多的有"<<max<<"种\n"<<flush;
        cout<<"它的位置在第"<<qRow+1<<"行,"<<"第"<<qCol<<"列\n"<<flush;
        cout<<"是否输出该情况下的所有方案?(Y/N)"<<flush;
        char c;
        do{
            cin>>c;//cin.ignore(80,'\n');
            if(c=='Y'||'y'){
                myBoard.Print(N,max);
                break;
            }
            else if(c=='N'||'n'){
                BacktoHome();
                break;
                }
                  else cout<<"你的输入有误,请重新输入!";
        }while(c);
    }
    
    void SpecialLeast()
    {
    //  system("cls");
        int qRow,qCol;  //储存最少方案解皇后的位置  
        int row,col=-1;
        int min=100; //储存最少方案解的个数
        cout<<"可以把皇后固定在某一列上来查找最少解\n";
        cout<<"把皇后固定在哪一列?";
        do{
            cin>>col; //cin.ignore(80,'\n');    
            if(!(col<=8&&col>=1))
                cout<<"你的输入有误,请重新输入!";
        }while(!(col<=8&&col>=1));
        for(row=0;row<8;row++){
            Solve(row,col-1);
            if(min>myBoard.nNum){
                min=myBoard.nNum;       
                qRow=row;qCol=col;
            }
        }
        cout<<"在你输入的这一列位置上,八皇后问题方案解最少的有"<<min<<"种\n"<<flush;
        cout<<"它的位置在第"<<qRow+1<<"行,"<<"第"<<qCol<<"列\n"<<flush;
        cout<<"是否输出该情况下的所有方案?(Y/N)"<<flush;
        char c;
        do{
            cin>>c;//cin.ignore(80,'\n');
            if(c=='Y'||'y'){
                myBoard.Print(N,min);
                break;
            }
            else if(c=='N'||'n'){
                BacktoHome();
                break;
                }
                  else cout<<"你的输入有误,请重新输入!";
        }while(c);
    }
    
    void PrintAll()
    {
        SolveAll();
        cout<<"八皇后问题共有"<<Board::AllNum<<"种解方案"<<endl<<flush;
        cout<<"是否输出所有这些解?(Y/N)"<<flush;
        char c;
        do{
        cin>>c;
        if(c=='Y'||'y')
            myBoard.Print(N,Board::AllNum);
        else if(c=='N'||'n')
            break;
            else
                cout<<"你的输入有误,请重新输入!";
        }while(c);
        cout<<"按任意键返回";
        getch();
        BacktoHome();
    }
    
    void Introduction()
    {
        cout<<"输出关于八皇后问题的介绍"<<flush;
        cout<<"按任意键返回\n"<<flush;
        getch();
        BacktoHome();
    }
    
    void Away()
    {
    //  system("cls");
        cout<<endl<<endl<<endl;
        cout<<"                              八 皇 后 问 题                               \n"<<flush;
        cout<<"  -------------------------------------------------------------------------\n"<<flush;
        cout<<"                                                    制作人:lzh       \n\n\n"<<flush;
        cout<<endl<<flush;
        cout<<"                                                                     "<<endl<<flush;
        cout<<"            ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~      "<<endl<<flush;
        cout<<"         *                                                      *    "<<endl<<flush; 
        cout<<"        *           谢谢你对本软件的支持   欢迎再次使用          *   "<<endl<<flush;
        cout<<"         *                                                      *    "<<endl<<flush;
        cout<<"            ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~      "<<endl<<flush;
        cout<<"\n\n\n\n\n\n\n\n\n"<<flush;
    }
    int main()
    {
        Initial();
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料