当前位置: 首页 > news >正文

[USACO1.5] 八皇后 Checker Challenge

题目描述

一个如下的 6 x 6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。

 

上面的布局可以用序列 2 4 6 1 3 5 来描述,第 i 个数字表示在第 i 行的相应位置有一个棋子,如下:

行号 1 2 3 4 5 6

列号 2 4 6 1 3 5

这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。  
并把它们以上面的序列方法输出,解按字典顺序排列。  
请输出前 3 个解。最后一行是解的总个数。

输入格式

一行一个正整数 n,表示棋盘是 n x n 大小的。

输出格式

前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。

样例 #1

样例输入 #1
6

样例输出 #1
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4

提示

【数据范围】  
对于 100% 的数据,6 <= n <= 13。

题目翻译来自NOCOW。

USACO Training Section 1.5

这是深搜的经典题目,可以分别对行,列,对角线做标记来做这道题。其中我们可以发现,一条对角线上,行和列的和和差的值是一样的。

#include <iostream>
using namespace std;
const int N = 100;
int a[N], b[N], c[N], d[N];//分别表示行,列和当前坐标的两条对角线
int n, total;
void queen(int x)
{if (x > n){if (total <= 2)//只输出前三个答案{for (int j = 1; j <= n; j++)cout << a[j] << " ";cout << "\n";}total++;return;}else{for (int i = 1; i <= n; i++){if (!b[i] && (!c[i + x]) && (!d[x - i + n])){a[x] = i;b[i] = 1;c[i + x] = 1;d[x - i + n] = 1;queen(x + 1);//遍历下一个b[i] = 0;//恢复标记c[i + x] = 0;d[x - i + n] = 0;}}}
}
int main()
{cin >> n;queen(1);//第一个皇后cout << total;
}

http://www.lryc.cn/news/129208.html

相关文章:

  • 【Mysql】MVCC版本机制的多并发
  • Vue--》打造个性化医疗服务的医院预约系统(六)
  • Unity ARFoundation 配置工程 (Android)
  • 【广州虚拟现实开发】VR智能中控系统进一步提高VR教学管理水平
  • 关于WordPress 的时间倒计时
  • 极光笔记 | 如何为您的业务开发和训练一个AI-BOT
  • 如何给ELK日志加上索引
  • elementUI遇到的问题记录
  • 计算机竞赛 协同过滤电影推荐系统
  • 网络综合布线实训室建设方案
  • 【山河送书第七期】:《强化学习:原理与Python实战》揭秘大模型核心技术RLHF!
  • LeetCode 400. 第 N 位数字——JAVA
  • 解决生成式AI落地之困,亚马逊云科技提供完整解决方案
  • 【5款登录验证校验】基于jquery实现的5款登录验证码组件(附完整源码)
  • 数据结构的树存储结构
  • linux--epoll
  • async和await
  • 如何从cpu改为gpu,pytorch,cuda
  • JavaScript简介--语句--变量
  • Windows CMD 关闭,启动程序
  • 统计XML标注文件中各标注类别的标签数量
  • 一百六十、Kettle——Linux上安装的Kettle9.2.0连接Hive3.1.2
  • C++新经典03--共用体、枚举类型与typedef
  • HCIP-OpenStack组件介绍
  • 2682. 找出转圈游戏输家
  • RESTAPI简介与DRF使用
  • 深度学习笔记(kaggle课程《Intro to Deep Learning》)
  • windows下载任意版本php
  • Linux命令
  • TDD(测试驱动开发)?