头歌:回溯法(八皇后问题、素数圈)

这篇博客探讨了如何使用非递归和递归算法解决八皇后问题,展示了两种不同的实现方式,并进一步介绍了如何构建素数圈,确保相邻两数之和为素数。通过代码实现和测试案例,帮助读者理解算法的运作原理。
摘要由CSDN通过智能技术生成

第一关:非递归实现皇后问题

任务描述

本关任务:在n×n格的棋盘上放置彼此不受攻击的 n 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。用非递归算法解决该问题。

下图是一个 8 个皇后的例子,8 个皇后彼此不受攻击。

编程要求

请在右侧编辑器Begin-End处补充代码,完成本关任务。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:4(皇后的数目)

预期输出:

 
  1. * Q * *
  2. * * * Q
  3. Q * * *
  4. * * Q *
  5. * * Q *
  6. Q * * *
  7. * * * Q
  8. * Q * *
  9. 4皇后问题共有2种摆放方案

#include <stdio.h>

/**********  Begin  **********/

#include <stdlib.h>

#include <stdbool.h>

#define MAX 100

int n,x[MAX],sum;

bool check(int k)//约束剪枝

{

    for(int j=1;j<k;j++)

    {

        if(abs(j-k)==abs(x[j]-x[k])||x[j]==x[k]) //同斜线和同列

            return false;

    }

    return true;

}

void output()

{

    for(int i=1;i<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值