问题链接: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皇后问题相关推荐

  1. CCF认证训练行动路线图

    通过CCF认证的训练题选自三个方面,一是CCF认证试题,二是使用北大百练的练习题等等,三是ACM-ICPC的练习题. CCF认证的试题是必须练习的,通过CCF试题的练习有助于了解试题风格特点.然而CC ...

  2. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  3. n皇后问题JS实现(N-Queens)

    n皇后问题作为经典的面试题,今天在LeetCode刷到,解法比较直接,回溯递归.其他解法咱也不会.... Leetcode地址:https://leetcode.com/problems/n-quee ...

  4. ccf Markdown

    说实话,这种题如果给我返回结果我是一定可以写出来的但是ccf不返回结果很烦,这种题我根本不能一次写对.还有重写时发现好多考试之前根本没注意到的点比如删掉空行 .......=_= #include&l ...

  5. I'm stuck! ccf模拟题。

    ccf模拟题. I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S' ...

  6. 回溯 皇后 算法笔记_算法笔记_04_回溯

    设计思想: (1)适用:求解搜索问题和优化问题. (2)搜索空间:数,节点对应部分解向量,可行解在树叶上. (3)搜索过程:采用系统的方法隐含遍历搜索树. (4)搜索策略:深度优先,宽度优先,函数优先 ...

  7. 计算机协会成立活动简报,“中国计算机学会CCF走进高校”活动在我校举行

    校新闻中心讯 9月13日下午,由中国计算机学会(CCF)主办的"CCF走进河南科技大学"活动在工科二号楼610举行.副校长魏世忠教授出席活动并致辞.长江学者.国家杰出青年基金获得者 ...

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

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

  9. 递归/回溯:八皇后问题N-Queens

    N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国 际西洋棋棋手马克斯·贝瑟尔于提出了8皇后问题. 将N个皇后放摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆 放 ...

最新文章

  1. leetcode-386 字典序排数
  2. R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:使用na_if()函数将0值替换为NA值、负收入替换为NA值
  3. 程序员的求生欲有所强?用 Python 花式哄女友
  4. SNMPM 配置 [linux windows solaris]
  5. 服务器如何安装虚拟声卡,虚拟声卡如何运作起来 分享介绍虚拟声卡安装使用方法...
  6. 线程间怎么交换数据_2 万字长文详解 10 大多线程面试题|原力计划
  7. 7、CSS 属性选择器
  8. 又一篇论文让我开始怀疑起了人生...
  9. 选择“关机”还是“睡眠”?
  10. 【Linux】一步一步学Linux——groups命令(93)
  11. pstack命令学习
  12. SQLite大批量插入性能优化
  13. sqoop导数据出现问题
  14. 基于AI的恶意软件分析技术(3)
  15. 学习STM32 RS485 原理与应用
  16. Java 随笔 IO
  17. scratch编程植物大战僵尸教程(一)
  18. windows11系统 “任务管理器已被管理员禁用”怎么解决
  19. cesium 添加geojson数据,创建白模,创建label标签,并使用canvas自定义聚合背景图片
  20. linux查看告警日志,linux怎么查看硬件告警

热门文章

  1. DXUT框架剖析(5)
  2. android 更新apk 应用为安装,应用未安装!从Android Studio构建安装APK时出错 - java
  3. bootstrap的表单验证 vue_分享几个基于Vue的UI库和开源项目
  4. . 在第一代计算机时代 编程采用,在第一代计算机时代,编程采用什么语言
  5. doceker模拟数据的生成
  6. android动画有几种,Android中常用的几种动画(总结)
  7. #if defined和#if !defined的含义
  8. ACM大牛总结的线段树专辑
  9. 剑指offer面试题48. 最长不含重复字符的子字符串(滑动窗口)
  10. DELPHI中操作ACCESS数据库