用C++ goto 解决 八皇后问题

8*8格子,如果在其中格子里面放一个皇后,那么他的横竖斜都不能在放其它皇后.求帮忙修改下我给的CODE并给我可以运行并输出每一种的排列和一共有多少种排列的CODE.在线急... 8*8格子, 如果在其中格子里面放一个皇后,那么他的横竖斜都不能在放其它皇后. 求帮忙修改下我给的CODE并给我可以运行并输出每一种的排列和一共有多少种排列的CODE.在线急等. 必须用到GOTO.
#include <iostream>
using namespace std;

int main(){
int b[8][8]={0}, r, c=0, counter=0;
b[0][0]=1;

NC: c++;
if(c==8)
goto printBoard;
r=-1;

NR: r++;
if(r==8) goto backtrack;
for(int i=0; i<c; i++){ //row
if (b[r][i]==1) goto NR;
}
for(int i=1; (r-i)>=0 && (c-i)>=0; i++){ //up diagonal
if (b[r-i][c-i]==1) goto NR;
}
for(int i=1; (r+i)<8 && (c-i)>=0; i++){ //down diagonal
if (b[r+i][c-i]==1) goto NR;
b[r][c]=1; goto NC;
}

backtrack: c--; //find queens.
if(c==-1){
return 0;
}
r=0;
while (b[r][c]!=1){
r++;
b[r][c]=0;
goto NR;
}

printBoard: counter++;
cout<< "Solution #"<<counter<<":"<<endl;
for(int i=0; i<8; i++){
for(int j=0; j<8; j++){
if(b[i][j]==1)
cout<< "Q";
else
cout<< "_";
cout<<endl;
}
cout<<endl;

}
goto backtrack;
}
我也不想说GOTO 但是是要求用goto来解决这道题 我能咋办
展开
 我来答
笃侠6A
2015-02-11 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3232万
展开全部
看看这个可行:
//八皇后问题
#include <iostream>
using namespace std;
const int N=8;
int x[9];
int num = 0; //统计解的个数

//输出一种布局
void print(int *p,int n){
int i,j;
cout << num <<":\n";
for(i=1; i<=n; i++){
for(j=1; j<p[i]; j++)
cout <<" - ";
cout <<" Q ";
for(j=p[i]+1; j<=n; j++)
cout <<" - ";
cout <<endl;
}
}

//求解n皇后布局
void nQueens(int n){
int k=1;
int j=1, flag=1;
x[1]=0;
while( k>0 ){
x[k]+=1; //转到下一行
while( x[k]<=n ){
//判断第k个皇后可否放在第x[k]列
j=flag=1;
while( j<k && flag ){
if( x[j]==x[k] || (abs(x[j]-x[k])==abs(j-k)) ){
flag=0;
goto L1;
}
j++;
}
L1:
if( flag==1 ) //可放
goto OK;//break;
//如果无解,最后一个皇后就会安排到格子外面去
x[k]+=1;
}
OK:
if( x[k]<=n ){
//第k个皇后仍被放置在格子内,有解
if( k==n ){
num++;
print(x,N); //输出这种布局
}else{
k++;
x[k]=0; //转到下一行
}
}else //第k个皇后已经被放置到格子外了,没解,回溯
k--; //回溯
}
}

int main(){
nQueens(N);
cout <<"共有" <<num <<"种布局方法。\n";
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
826010478
2015-02-11 · TA获得超过521个赞
知道小有建树答主
回答量:920
采纳率:53%
帮助的人:284万
展开全部
别人都是拒绝使用GOTO,你可倒好必须使用GOTO
追问
题目要求用goto来解决,所以只能求goto 的版本额
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式