C++课程设计八皇后问题(2)

2019-04-16 23:47

while(8) { kaishi: char xz;

cout<<\《《《请您选择程序的功能》》》 ******\

cout<<\如果您想通过自己输入第一个皇后的坐标获得答案,请选择[1]...\\n\ cout<<\如果您想让程序自动运算出所有的排列结果,请选择[2]...\\n\\n\ cout<<\请输入您选择的数字:\ cin>>xz; switch(xz){ case '1': do {

char PrintBoard[100][8][8]; Stack rowStack;

int qRow, qCol, col, row, attacked, exitLoop,m=0; Board myBoard;

cout<<\请输入第一个皇后的坐标Row(行)和Col(列)\\nRow: \ cin>>qRow;

cout<<\

cin>>qCol; //第一个皇后位置 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; //从0行开始找放置点 col++; //列号加1 if (col==qCol)

col++; //继续下一列 exitLoop=1; }

if (exitLoop)

break; //找到退出本层循环

else row++; //置一个皇后不成功,继续行循环 }

if (col==8) {

{static int p; int i,j;

for(i=0;i<8;i++) for(j=0;j<8;j++)

PrintBoard[p][i][j]=myBoard.board[i][j]; p++; } m++;

row=8; }

if (row==8) {

rowStack.Pop(row); //前一列皇后所在行号出栈 col--; //到前一列 if (col==qCol) col--;

myBoard.RemoveQueen(row,col); //移去皇后 row++; //找下一个位置 }

} while(col>=0); //回到0列

int n=m;int m1=5;int p=0;int s=0;int i,j; do {

if (n-p<5) m1=n; for(i=0;i<8;i++) {

for(p=s;p

cout<

cout<

//一次8行同时输出5个棋盘: p=p-1; m1=(m1+5)

cout<<\当皇后坐标为(\时的解的个数为:

\

cout<<\请选择是否结束程序?\\n---> 选择[1]继续程序...\\n---> 选择[2]结束程序...\\n\\n\\n\ char xz2; cin>>xz2; switch(xz2) {

case '1':

goto kaishi; break; case '2': goto end; break; }

}while(1); break;

//*********************下面是程序自动运算所有结果的程序************************ case '2': {

int m=0;

int qRow,qCol;

int rmax,rmin,cmax,cmin,min,max; char zzz[1000][8][8]; int compare[8][8]; char news[100][8][8]; int ii,jj,kk,qq; int nn;

for(qRow=0;qRow<8;qRow++) for(qCol=0;qCol<8;qCol++) {

Stack rowStack;

int col, row, attacked, exitLoop,cmp=0; Board myBoard;

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.Print(); static int p; int i,j;

for(i=0;i<8;i++) { for(j=0;j<8;j++)

zzz[p][i][j]=myBoard.board[i][j]; } p++; m++; cmp++;

row=8; }

if (row==8) {

rowStack.Pop(row);

col--; //到前一列 if (col==qCol) col--;

myBoard.RemoveQueen(row,col); //移去皇后 row++; //找下一个位置 }

} while(col>=0); //回到0列 compare[qRow][qCol]=cmp; }

//**********cout<<\//*********************以下是对坐标和解的数目的输出*********************** {

int n=m;int m1=5;int p=0;int s=0;int i,j;

do {

if (n-p<5) m1=n; for(i=0;i<8;i++) {

for(p=s;p

cout<

cout<

//一次8行同时输出5个棋盘: p=p-1; m1=(m1+5)

cout<<\程序自动求出了所有的答案的个数为:\种。\\n程序自动排除重复的答案后的个数为:92种。\\n\

//******************************** nn=sizeof(zzz)/(sizeof(char)*64); for(ii=0;ii<100;ii++) for(qq=0;qq

{if(comp(news[ii],zzz[qq])) {

for(jj=0;jj<8;jj++) for(kk=0;kk<8;kk++)

news[ii][jj][kk]=zzz[qq][jj][kk]; } }

//***********************接下来是进行比较大小************************** {min=max=compare[0][0];

rmax=rmin=cmax=cmin=0; //初始化过程记录大小值的行列号 for (qRow=0;qRow<8;qRow++) for(qCol=0;qCol<8;qCol++) {

if(compare[qRow][qCol]>max)

{max=compare[qRow][qCol];rmax=qRow;cmax=qCol;} if(compare[qRow][qCol]

{min=compare[qRow][qCol];rmin=qRow;cmin=qCol;} }

cout<<\

cout<<\在(\固定一个皇后的数目最多,个数


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

下一篇:2014施工人员入场安全教育考试卷

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

马上注册会员

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