C++课程设计
void cQueen::show()//输出棋盘状态 {
cout<<\非递归法)皇后摆放方式的第\种情况:\
for(int i=0;i<8;i++) //输出八皇后的各种状态,有皇后的位置用@ 表示,没有皇后的位置用* 表示
{ }
cout< cout<<'('< cout< cout< cout< cout< // system(\从程序里调用pause命令,一个结果一个结果地看 } void measure2() { } 17 cQueen a; a.step(); C++课程设计 /*--------------------------------------------------------------*/ /*------------------方法三:穷举法---------------------------*/ /*--------------------------------------------------------------*/ //使用优化后的穷举法,用递归实现N层穷举,每调用一次穷举函数则穷举一列 const int LINE=8;//const定义整新型常量LINE和ROW(8*8的棋盘) const int ROW=8; void queen(int row,int rec[]);//row为当前穷举的列,rec[]记录已穷举的信息,rec[3]=2代表(3,2)已放下棋子 bool isqueen(int i,int rec[],int row);//判断当前i是否与已放下的棋子能相互攻击 void printqueen(int rec[]);//输出符合条件的棋子摆放方式 void measure3() { int rec[9]={0};//记录穷举信息数组 queen(1,rec);//执行八皇后 } void queen(int row,int rec[])//八皇后函数 { int tmprec[ROW+1]={0}; system(\ //向下一列穷举传递信息时使用tmprec,不丢失rec的记录 for(int i=1;i<=row;i++) tmprec[i]=rec[i];//复制数组 18 C++课程设计 if (row!=ROW)//不是最后一列时(第ROW列即为最后一列) { for (i=1;i<=ROW;i++) { if(isqueen(i,rec,row)) //i与已放下的棋子不能相互攻击时 { tmprec[row]=i; queen(row+1,tmprec);//继续穷举下一列 } bool isqueen(int i,int rec[],int row)//判断当前i是否与已放下的棋子能相互攻击 {//(row,i)即是此次穷举出来的棋子的坐标 if (row==1) return 1;//第一列 for(int j=1;j else//最后一列时 for (i=1;i<=ROW;i++) if(isqueen(i,rec,row))//i与已放下的棋子不能相互攻击时 { } tmprec[row]=i; printqueen(tmprec);//输出符合条件的棋子摆放方式 } } 19 C++课程设计 if(rec[j]==i||rec[j]==i+row-j||rec[j]==i-row+j)//如果(有棋子在同一直线||有棋子在同一斜线) } void printqueen(int rec[])//输出符合条件的棋子摆放方式 { char q[LINE+1][ROW+1]={'0'}; static int num=1;//记录已输出符合条件的棋盘数量 for (int i=1;i<=LINE;i++) { } //将一维记录转换成LINE*ROW的矩阵,方便打印 cout<<\穷举法)皇后摆放方式第\种情况:\输for (int j=1;j<=ROW;j++) { } if(rec[i]!=j) q[i][j]='*'; } return 1; return 0; else q[i][j]='@'; 出数量 for (i=1;i<=ROW;i++) { for (int j=1;j<=ROW;j++) 20 C++课程设计 } cout< cout< cout< cout< for (int j=1;j<=ROW;j++) if (rec[i]==j) cout<<\ // system(\ } void menu() { //输出界面 cout<<\cout<<\‖----------------------------------------‖\cout<<\‖ ‖\cout<<\‖ 八皇后问题 ‖\cout<<\‖ ==================== ‖\cout<<\‖ 1.方法一: 递归法 ‖\cout<<\‖ 2.方法二: 运用类 ‖\cout<<\‖ 3.方法三: 穷举法 ‖\cout<<\‖ 0.后退 ‖\ 21