小菜鸟快哭了。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个回答

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();
}

qq_21494941
qq_21494941 回复caozhy: 已采纳。辛苦您啦,但是这么改输入5是没有反应哒
6 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_21494941: 看我修改的回答,可以编译了,还有问题的话,采纳本回答继续开问题问
6 个月之前 回复
qq_21494941
qq_21494941 回复caozhy: 改了,我特地用word复制,再查找替换的
6 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_21494941: 几个地方都修改了么
6 个月之前 回复
qq_21494941
qq_21494941 之前试过啦,把free改掉,程序就错了。free是书上已经给的程序段里的
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

2
来自计算机菜鸟的提问 :c语言中void怎么用?求解求解。求师傅
2
菜鸟学习轮播图数据的加载,总是加不成功。请求大神指导
1
菜鸟的提问:关于C++类的组合的疑问,我这串代码哪儿错了
1
学习Spring AOP的时候,只有加入<aop:config>到xml中,test就无法运行
2
C/C++菜鸟 指针问题不理解
1
执行效率哪个好?求大神指导 菜鸟一枚
0
菜鸟求 可设定缓冲空间大小的视频播放
1
菜鸟想询问一个关于easyx的函数问题!
2
Syntax error, insert "Dimensions" to complete ReferenceType
4
class的一个古怪问题,这是怎么回事?
0
求大佬帮助,我不知道我是不是有那种情况没考虑到,到OJ上提交显示答案错误(本人c语言菜鸟)?
5
关于C/C++中i=2时,(++i)+(++i)+(++i)+(++i)的计算结果引申出的疑问
3
菜鸟虚心请教微信小程序的问题,为什么在attached后面加了function()之后就不会执行?
2
初学菜鸟,求大佬解答java 中自加自减的题目
2
非select下拉框定位不到元素,求大神帮忙,菜鸟在线等
0
MYSQL查询用到的主键id索引问题
1
C语言小菜鸟#统计相同字符的个数,哪里有误?为啥个数总是0?
1
[Android]如何在canvas上随机drawBitmap,并且每个bitmap都不会被重叠?
3
为什么我的表单检验没有被触发,直接就跳转到成功页面了,菜鸟真诚提问!!!
5
自己开发的微信小程序能否将信息保存到本地?