任务描述

本关任务:在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。

相关知识

用数组int q[N]表示棋盘状态,例如q[1]=1表示第1行皇后放在第1列。 皇后k在第k行第q[k]列:(k,q[k]) 对于(i,j)位置上的皇后,是否与已放好的皇后(k,q[k])(1≤k≤i-1)有冲突呢?

q[k]== j 时,两皇后在同一列上; abs(k-i)==abs(q[k]-j) 时,两皇后在同一斜线上。 两种情况两皇后都可相互攻击。

测试(i,j)位置能否摆放皇后的函数定义如下:

bool place(int i,int j)
{if (i==1) return true;        //第一个皇后总是可以放置int k=1;while (k<i)                    //k=1~i-1是已放置了皇后的行{  if ((q[k]==j) || (abs(q[k]-j)==abs(i-k)))return false;k++;}return true;
}

输出n皇后问题的一个解的函数定义如下:

void dispasolution(int n)           //输出n皇后问题的一个解
{printf("第%d个解:",++count);for (int i=1;i<=n;i++)printf("(%d,%d) ",i,q[i]);printf("\n");
}

当n=6时,如下图所示是6皇后问题的一个解。

第1个解:(1,2) (2,4) (3,6) (4,1) (5,3) (6,5)

编程要求

根据提示,在右侧编辑器补充代码,完成函数的定义:

  • 函数 queen(int i,int n) 放置1~i的皇后

测试说明

平台会对你编写的代码进行测试:

测试输入: 6

预期输出:

6皇后问题求解如下:
第1个解:(1,2) (2,4) (3,6) (4,1) (5,3) (6,5)
第2个解:(1,3) (2,6) (3,2) (4,5) (5,1) (6,4)
第3个解:(1,4) (2,1) (3,5) (4,2) (5,6) (6,3)
第4个解:(1,5) (2,3) (3,1) (4,6) (5,4) (6,2)

开始你的任务吧,祝你成功!

代码示例

#include <stdio.h>
#include <stdlib.h>
#define N 20                    //最多皇后个数
int q[N];                       //存放各皇后所在的列号,即(i,q[i])为一个皇后位置
int count=0;                   //累计解个数
void dispasolution(int n)          //输出n皇后问题的一个解
{printf("第%d个解:",++count);for (int i=1;i<=n;i++)printf("(%d,%d) ",i,q[i]);printf("\n");
}bool place(int i,int j)            //测试(i,j)位置能否摆放皇后
{if (i==1) return true;       //第一个皇后总是可以放置int k=1;while (k<i)                    //k=1~i-1是已放置了皇后的行{ if ((q[k]==j) || (abs(q[k]-j)==abs(i-k)))return false;k++;}return true;
}void queen(int i,int n)            //放置1~i的皇后
{/********** Begin **********/ if(i>n)dispasolution(n);else {for (int j=1;j<=n;j++)if(place(i,j)){q[i]=j;queen(i+1,n);}}/********** End **********/
}int main()
{   int n;                  //n为存放实际皇后个数//printf("皇后问题(n<20) n=");scanf("%d",&n);if (n>20)printf("n值太大,不能求解\n");else{  printf("%d皇后问题求解如下:\n",n);queen(1,n);                  //放置1~i的皇后}return 0;
}

【头歌】求解n皇后问题相关推荐

  1. AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台

    AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台 前言 一.AlphaBeta剪枝是什么? 1.由来, 最大最小决策树 2.发展 3. AlphaBeta剪枝 二.实验算法伪代码 三.实验算 ...

  2. 头歌c语言实训作业题解

    头歌c语言实训作业题解 持续更新 C语言程序设计编辑与调试环境 1.打印输出 Hello World 2.打印输出图形 3.求三个数的最大值 4.熟悉C语言调试环境 C语言中最基本的输入输出 1.看看 ...

  3. 头歌实践教学平台数据结构与算法:02线性表

    针对数据结构02线性表在头歌平台练习过程中的完成代码,关卡数目较多,每题思路单独在每一关中解释.如有其他需求请留言. 第一关 可以把问题转换为:遍历B中的元素,如果该元素不在A中,则把该元素插入到A中 ...

  4. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

    C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...

  5. 数据结构学习之栈求解n皇后问题

    数据结构学习之栈求解n皇后问题 0x1 目的 ​ 深入掌握栈应用的算法和设计 0x2 内容 ​ 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...

  6. 回溯法求解N皇后问题(Java实现)

    回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解.这种迭代类似于穷举并且是试探性的,因为当目前的可 ...

  7. 数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案

    数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块. 创作不易,一键三连给博主一个支持呗. 文章目录 ...

  8. 两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案

    数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便寻找,按照头歌的门类从新整理了实训的分类,朋友们记得看标题哦,按标题寻找! 该篇为爬虫知识储备! 文章目录 实训一:HTML基础 第一关:初识 ...

  9. linux操作系统中的shell编程----基于头歌实践教学编写shell脚本测试结果

    一.前言 今天,又要使用我的大学技能-写实验报告.linux操作系统课程实验课到了尾声,这是最后一次linux操作系统实验报告,我喜极而泣. 行了,废话不多说,我直接开始肝!!本实验是基于基于头歌实践 ...

  10. 非递归求解N皇后问题(回溯法)

    一般而言,回溯法可以说是一种穷举法,适合于求解各种深度优先搜索的问题. 回溯法是一种应用广泛的算法.其关键点是解空间树和n元组可行解的定义. 非递归回溯法程序的结构基本上是相同的,该程序的结构可以用求 ...

最新文章

  1. phpcurl 请求Chunked-Encoded data 遇到的一个问题
  2. [Java学习]Striing StringBuffer StringBuilder 的比
  3. python安装模块时读取超时_Windows在pip install tensorflow遇到的问题 一些python安装包的时候,超时问题以及权限问题...
  4. C++虚继承(六) --- 虚继承浅析
  5. 单片机 | 3种时钟电路方案对比,你常用哪一种?
  6. python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数
  7. san服务器型号,san存储服务器配置
  8. Too many open files 问题的解决
  9. 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)
  10. “我不是个优秀的 Web 开发人员,我只是擅长搜索谷歌”
  11. [已送完]赠送Google Wave 邀请码
  12. LDR_DATA_TABLE_ENTRY结构得不到完整路径?
  13. 机器学习的十大经典算法,面试必问
  14. 计算机二级c语言编程题库100题下载,计算机二级c语言编程题库(100题).pdf
  15. ABSynthe : 侧信道攻击加密函数窃取密钥
  16. C# sqlhelper
  17. linux逻辑卷管理器下载,LVM逻辑卷管理器(Logical Volume Manager)
  18. 服务器挂载本地iso文件系统,CentOS系统中挂载光盘镜像ISO文件的教程
  19. Nacos配置热更新两种方式。
  20. java 封装类_java的基本类型和对应的封装类

热门文章

  1. mimikatz 使用
  2. 在线教育平台项目——整体架构
  3. python 掷骰子游戏
  4. SimSiam:Exploring Simple Siamese Representation Learning
  5. 318页精美排版配色商务通用PPT模板
  6. DRAM失效机制和故障模型
  7. vertx编程需注意的点
  8. HTML5期末大作业:生鲜水果蔬菜商城网站设计——天天生鲜水果蔬菜商城(10页) web前端设计与开发期末作品/期末大作业
  9. 机械键盘音乐律动无效、改键无效等问题
  10. Python自带的服务器