八皇后课程设计实验报告 - C++(5)

2019-02-16 17:33

C++课程设计

void cQueen::show()//输出棋盘状态 {

cout<<\非递归法)皇后摆放方式的第\种情况:\

for(int i=0;i<8;i++) //输出八皇后的各种状态,有皇后的位置用@ 表示,没有皇后的位置用* 表示

{ }

cout<

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


八皇后课程设计实验报告 - C++(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2005年——2011年浙师大《电子商务概论》期末考试题库

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: