浅梨花 2016-12-27 09:26 采纳率: 0%
浏览 1142

关于C语言八皇后问题。。。。

#include
#include

int queenPlaces[92][8]; //存放92种皇后棋子的摆放方法
int count = 0;
int board[8][8]; //仿真棋盘
void putQueen(int ithQueen); //递归函数,每次摆好一个棋子

void main()
{
int n, i, j;

for(i = 0; i < 8; i++){ // 初始化
for(j = 0; j < 8; j++)
board[i][j] = -1;
for(j = 0; j < 92; j++)
queenPlaces[j][i] = 0;
}
putQueen(0); //从第0个棋子开始摆放,运行的结果是将queenPlaces生成好
scanf("%d", &n);
for(i = 0; i < n; i++){
int ith;
scanf("%d", &ith);
for(j = 0; j < 8; j++)
printf("%d", queenPlaces[ith - 1][j]);
printf("\n");
}
}
void putQueen(int ithQueen){
int i, k, r;
if(ithQueen == 8){
count ++;
return;
}
for(i = 0; i < 8; i++){
if(board[i][ithQueen] == -1){
//摆放皇后
board[i][ithQueen] = ithQueen;
//将其后所有的摆放方法的第ith个皇后都放在i+1的位置上
//在i增加以后,后面的第ith个皇后摆放方法后覆盖此时的设置
for(k = count; k < 92; k++)
queenPlaces[k][ithQueen] = i + 1;
//设置控制范围
for(k = 0; k < 8; k++)
for(r = 0; r < 8; r++)
if(board[k][r] == -1 &&
(k == i || r == ithQueen || abs(k - i) == abs(r - ithQueen)))
board[k][r] = ithQueen;
//向下级递归
putQueen(ithQueen + 1);
//回溯,撤销控制范围
for(k = 0; k < 8; k++)
for(r = 0; r < 8; r++)
if(board[k][r] == ithQueen) board[k][r] = -1;
}
}
}
当ithQueen=2,i=2这段代码中在putQueen函数里的第二个皇后放置时放置在棋盘的第二列第三行会使第五个皇后无法放置那具体是根据那条语句回溯?

  • 写回答

2条回答 默认 最新

  • .LAL. C/C++领域新星创作者 2022-07-28 15:23
    关注

    #include<bits/stdc++.h>
    using namespace std;
    bool d[16]={0},b[9]={0},c[16]={0};
    short tot,sum,a[9];
    int search(int);
    int print();
    int main()
    {
    //tot=0;
    search(1);
    //cout<<tot;
    }
    int search(int i){
    int j;
    for(j=1;j<=8;j++)
    if((!b[j])&&(!c[i+j])&&(!d[i-j+7]))
    {
    a[i]=j;
    b[j]=1;
    c[i+j]=1;
    d[i-j+7]=1;
    if(i==8)print();
    else search(i+1);
    b[j]=0;
    c[i+j]=0;
    d[i-j+7]=0;
    }
    //return 0;
    }
    int print()
    {
    int i;
    sum++;//tot=tot+1;
    cout<<"sun="<<sum<<endl;
    for(i=1;i<=8;i++)
    cout<<setw(4)<<a[i];
    cout<<endl;
    //return 0;
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动