【头歌】求解n皇后问题
任务描述
本关任务:在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皇后问题相关推荐
- AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台
AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台 前言 一.AlphaBeta剪枝是什么? 1.由来, 最大最小决策树 2.发展 3. AlphaBeta剪枝 二.实验算法伪代码 三.实验算 ...
- 头歌c语言实训作业题解
头歌c语言实训作业题解 持续更新 C语言程序设计编辑与调试环境 1.打印输出 Hello World 2.打印输出图形 3.求三个数的最大值 4.熟悉C语言调试环境 C语言中最基本的输入输出 1.看看 ...
- 头歌实践教学平台数据结构与算法:02线性表
针对数据结构02线性表在头歌平台练习过程中的完成代码,关卡数目较多,每题思路单独在每一关中解释.如有其他需求请留言. 第一关 可以把问题转换为:遍历B中的元素,如果该元素不在A中,则把该元素插入到A中 ...
- C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题
C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...
- 数据结构学习之栈求解n皇后问题
数据结构学习之栈求解n皇后问题 0x1 目的 深入掌握栈应用的算法和设计 0x2 内容 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...
- 回溯法求解N皇后问题(Java实现)
回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解.这种迭代类似于穷举并且是试探性的,因为当目前的可 ...
- 数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案
数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块. 创作不易,一键三连给博主一个支持呗. 文章目录 ...
- 两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案
数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便寻找,按照头歌的门类从新整理了实训的分类,朋友们记得看标题哦,按标题寻找! 该篇为爬虫知识储备! 文章目录 实训一:HTML基础 第一关:初识 ...
- linux操作系统中的shell编程----基于头歌实践教学编写shell脚本测试结果
一.前言 今天,又要使用我的大学技能-写实验报告.linux操作系统课程实验课到了尾声,这是最后一次linux操作系统实验报告,我喜极而泣. 行了,废话不多说,我直接开始肝!!本实验是基于基于头歌实践 ...
- 非递归求解N皇后问题(回溯法)
一般而言,回溯法可以说是一种穷举法,适合于求解各种深度优先搜索的问题. 回溯法是一种应用广泛的算法.其关键点是解空间树和n元组可行解的定义. 非递归回溯法程序的结构基本上是相同的,该程序的结构可以用求 ...
最新文章
- phpcurl 请求Chunked-Encoded data 遇到的一个问题
- [Java学习]Striing StringBuffer StringBuilder 的比
- python安装模块时读取超时_Windows在pip install tensorflow遇到的问题 一些python安装包的时候,超时问题以及权限问题...
- C++虚继承(六) --- 虚继承浅析
- 单片机 | 3种时钟电路方案对比,你常用哪一种?
- python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数
- san服务器型号,san存储服务器配置
- Too many open files 问题的解决
- 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)
- “我不是个优秀的 Web 开发人员,我只是擅长搜索谷歌”
- [已送完]赠送Google Wave 邀请码
- LDR_DATA_TABLE_ENTRY结构得不到完整路径?
- 机器学习的十大经典算法,面试必问
- 计算机二级c语言编程题库100题下载,计算机二级c语言编程题库(100题).pdf
- ABSynthe : 侧信道攻击加密函数窃取密钥
- C# sqlhelper
- linux逻辑卷管理器下载,LVM逻辑卷管理器(Logical Volume Manager)
- 服务器挂载本地iso文件系统,CentOS系统中挂载光盘镜像ISO文件的教程
- Nacos配置热更新两种方式。
- java 封装类_java的基本类型和对应的封装类