1214:八皇后

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 9918     通过数: 6127

【题目描述】

会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 × 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。

对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。

给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。

【输入】

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1≤b≤92)。

【输出】

输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。

【输入样例】

2
1
92

【输出样例】

15863724
84136275

【分析】

显然问题的关键在于如何判定某个皇后所在的行、列、斜线上是否有别的皇后;可以从矩阵的特点上找到规律,如果在同一行,则行号相同;如果在同列上,则列号相同;如果同在 / 斜线上,则行列值之和相同;如果同在 \ 斜线上,则行列值之差相同;从下图可验证。

考虑每行有且仅有一个皇后,设一维数组 a[1...8] 表示皇后的放置∶第 i 行皇后放在第 j 列,
用 a[i] = j 来表示,即下标是行数,内容是列数。例如∶a[3] = 5 就表示第3个皇后在第3行第5列上。
        判断皇后是否安全,即检查同一列、同一对角线是否已有皇后,建立标志数组 b[1...8] 控制
同一列只能有一个皇后,若两皇后在同一对角线上,则其行列坐标之和或行列坐标之差相等,故亦可建立标志数组 c[1...16]、d[-7...7]控制同一对角线上只能有一个皇后。如果斜线不分方向,则同一斜线上两皇后的行号之差的绝对值与列号之差的绝对值相同。在这种方式下,要表示两个皇后 i 和 i 不在同一列或斜线上的条件可以描述为∶(a[i]!=a[j]) && (abs(i-j) != abs(a[i]-a[j])) { i 和 j 分别表示两个皇后的行号 }。

【参考代码】

#include <stdio.h>
#include <math.h>
#define N 9
int a[N];     //皇后放置数组
int b[N];     //标志数组,控制同一列只有一个皇后
int c[N];     //标志数组,控制正向对角线只能有一个皇后
int d[N];     //标志数组,控制反向对角线只能有一个皇后
int sum,x;
void print()
{int i;sum++;      //方案数累加1 if(x==sum){for(i=1;i<=8;i++)printf("%d",a[i]);printf("\n");}
}
void dfs(int i)
{int j;for(j=1;j<=8;j++)  // 每个皇后都有8位置(列)可以试放{if(!b[j] && !c[i+j] && !d[i-j+7])  //寻找放置皇后的位置 {                  //由于C++不能操作负数组,因此考虑加7a[i]=j;        //摆放皇后 b[j]=1;        //宣布占领第j列 c[i+j]=1;      //占领两个对角线 d[i-j+7]=1;if(i==8)       //8个皇后都放好,输出 print();else           //继续递归放置下一个皇后 dfs(i+1);b[j]=0;        //递归返回,即为回溯一步,当前皇后退出 c[i+j]=0;d[i-j+7]=0;}}
}
int main()
{int i,j,t;scanf("%d",&t);while(t--){x=0;scanf("%d",&x);dfs(1);     //从第一个皇后开始放置 sum=0;}return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1214

信息学奥赛一本通(1214:八皇后)相关推荐

  1. 信息学奥赛一本通 1214:八皇后 | OpenJudge NOI 2.5 1756:八皇后

    [题目链接] ybt 1214:八皇后 OpenJudge NOI 2.5 1756:八皇后 [题目考点] 1. 深搜 2. 二维数组 同一行:行坐标相同 同一列:列坐标相同 同一左上右下斜线:行列坐 ...

  2. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  3. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  4. 经典问题的另类解法——以信息学奥赛一本通c++版1216红与黑为例

    题目链接:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 题目描述: 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动 ...

  5. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  6. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  7. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  8. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  9. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

  10. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

最新文章

  1. python计算数据百分比_概率计算:定义概率分布数据结构,Python实现概率分布计算...
  2. 0基础学python-从0开始学Python,0基础小白
  3. HTML5标签的语义认知和理解
  4. win11 WSL Ubuntu更换为清华源
  5. 力扣两数之和 II - 输入有序数组
  6. react-router4 + webpack Code Splitting
  7. html 最新计算倒计时,javascript实时计算时间倒计时
  8. 基于JAVA+SpringMVC+MYSQL的勤工助学管理系统
  9. android之NDK version was not found
  10. 记风雨兼程的2020年,2021年,我来了!
  11. php解析shapefile,Fiona简介及Shapefile数据读取
  12. #S/4HANA 1610: Use case series intro and collection
  13. 30天自制操作系统——第一天到第二天
  14. 直播APP软件开发,直播系统开发的技术架构揭秘
  15. springAop原理之(三)Advised接口族
  16. Windows 的应急事件分类-
  17. redis C接口hiredis 简单函数使用介绍
  18. 讯搜 配置mysql_迅搜使用指南
  19. 小白都能看懂的关于Mixins机制的理解
  20. 孙振耀退休感言(一)

热门文章

  1. ArcGIS Engine代码共享-可以直接移植到你的工程中
  2. [文摘20080428]无线局域网的相关网络安全技术应用指南
  3. linux服务与进程管理sup,linux下进程管理工具-supervisord
  4. 终于过审了!腾讯给了我20万红包封面,我得发出去。。。
  5. 新一代Spring Web框架WebFlux!
  6. 面试官:Netty的线程模型可不是Reactor这么简单
  7. JVM夺命连环10问
  8. 同时面了腾讯三个部门,拿下offer!
  9. JEECG支付服务窗专题 - 支付窗激活开发者模式
  10. JAVA版本微信公众账号开源项目版本发布-jeewx1.0(捷微)