CCF NOI1149 N皇后问题
问题链接:CCF NOI1149 N皇后问题。
时间限制: 1000 ms 空间限制: 262144 KB
题目描述
在N*N(N<=10)的棋盘上放N个皇后,使得她们不能相互攻击。两个皇后能相互攻击当且仅当它们在同一行,或者同一列,或者同一条对角线上。
找出一共有多少种放置方法。
输入
第一行输入N。
输出
输出方案总数。
样例输入
4
样例输出
2
数据范围限制
N<=10
提示
问题分析
该问题与《HDU2553 N皇后问题》几乎是同一问题,输入数据不同。
程序说明
参见参考链接。
要点详解
- 回溯法是常用的算法。
参考链接:HDU2553 N皇后问题。
100分通过的C语言程序:
#include <stdio.h>#define TRUE 1
#define FALSE 0
#define MAXQUEEN 10
#define ABS(x) ((x>0)?(x):-(x)) /*求x的绝对值*//*存放8个皇后的列位置,数组下标为皇后的列位置*/
int queen[MAXQUEEN];
int total_solution; /*计算共有几组解*//* 测试在(row,col)上的皇后是否遭受攻击若遭受攻击则返回值为1,否则返回0 */
int attack(int row, int col)
{int i, atk=FALSE;int offset_row, offset_col;i=0;while(!atk && i<row){offset_row=ABS(i-row);offset_col=ABS(queen[i]-col);/* 判断两皇后是否在同一列,是否在同一对角线 *//* 若两皇后在同列或同对角线,则产生攻击,atk==TRUE */atk = (queen[i] == col) || (offset_row == offset_col);i++;}return atk;
}/* 递归放置皇后子程序 */
void place(int q, int n)
{int i=0;while(i < n){if(!attack(q, i)) /* 皇后未受攻击 */{queen[q]=i; /* 储存皇后所在的列位置 *//* 判断是否找到一组解 */if(q == n-1)total_solution++; /* 得到一个解 */elseplace(q+1, n); /* 否则继续摆下一个皇后 */}i++;}
}int main(void)
{int n;scanf("%d", &n);// 皇后遍历total_solution = 0;place(0, n); /*从第0个皇后开始摆放至棋盘*/printf("%d\n", total_solution);return 0;
}
CCF NOI1149 N皇后问题相关推荐
- CCF认证训练行动路线图
通过CCF认证的训练题选自三个方面,一是CCF认证试题,二是使用北大百练的练习题等等,三是ACM-ICPC的练习题. CCF认证的试题是必须练习的,通过CCF试题的练习有助于了解试题风格特点.然而CC ...
- CCF CSP 201609-2 火车购票
题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...
- n皇后问题JS实现(N-Queens)
n皇后问题作为经典的面试题,今天在LeetCode刷到,解法比较直接,回溯递归.其他解法咱也不会.... Leetcode地址:https://leetcode.com/problems/n-quee ...
- ccf Markdown
说实话,这种题如果给我返回结果我是一定可以写出来的但是ccf不返回结果很烦,这种题我根本不能一次写对.还有重写时发现好多考试之前根本没注意到的点比如删掉空行 .......=_= #include&l ...
- I'm stuck! ccf模拟题。
ccf模拟题. I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S' ...
- 回溯 皇后 算法笔记_算法笔记_04_回溯
设计思想: (1)适用:求解搜索问题和优化问题. (2)搜索空间:数,节点对应部分解向量,可行解在树叶上. (3)搜索过程:采用系统的方法隐含遍历搜索树. (4)搜索策略:深度优先,宽度优先,函数优先 ...
- 计算机协会成立活动简报,“中国计算机学会CCF走进高校”活动在我校举行
校新闻中心讯 9月13日下午,由中国计算机学会(CCF)主办的"CCF走进河南科技大学"活动在工科二号楼610举行.副校长魏世忠教授出席活动并致辞.长江学者.国家杰出青年基金获得者 ...
- C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题
C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...
- 递归/回溯:八皇后问题N-Queens
N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...
最新文章
- leetcode-386 字典序排数
- R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:使用na_if()函数将0值替换为NA值、负收入替换为NA值
- 程序员的求生欲有所强?用 Python 花式哄女友
- SNMPM 配置 [linux windows solaris]
- 服务器如何安装虚拟声卡,虚拟声卡如何运作起来 分享介绍虚拟声卡安装使用方法...
- 线程间怎么交换数据_2 万字长文详解 10 大多线程面试题|原力计划
- 7、CSS 属性选择器
- 又一篇论文让我开始怀疑起了人生...
- 选择“关机”还是“睡眠”?
- 【Linux】一步一步学Linux——groups命令(93)
- pstack命令学习
- SQLite大批量插入性能优化
- sqoop导数据出现问题
- 基于AI的恶意软件分析技术(3)
- 学习STM32 RS485 原理与应用
- Java 随笔 IO
- scratch编程植物大战僵尸教程(一)
- windows11系统 “任务管理器已被管理员禁用”怎么解决
- cesium 添加geojson数据,创建白模,创建label标签,并使用canvas自定义聚合背景图片
- linux查看告警日志,linux怎么查看硬件告警
热门文章
- DXUT框架剖析(5)
- android 更新apk 应用为安装,应用未安装!从Android Studio构建安装APK时出错 - java
- bootstrap的表单验证 vue_分享几个基于Vue的UI库和开源项目
- . 在第一代计算机时代 编程采用,在第一代计算机时代,编程采用什么语言
- doceker模拟数据的生成
- android动画有几种,Android中常用的几种动画(总结)
- #if defined和#if !defined的含义
- ACM大牛总结的线段树专辑
- 剑指offer面试题48. 最长不含重复字符的子字符串(滑动窗口)
- DELPHI中操作ACCESS数据库