USACO 6.5.5 Checker Challenge 回溯

[USACO1.5] 八皇后 Checker Challenge 题解 八皇后 阅读详情

http://train.usaco.org/usacoprob2?a=BI4LEPNXcEa&S=checker

题目大意:在一个N*N的棋盘上放棋子,要求每一行每一列都有一个,每一个对角线不超过一个(不仅仅主对角线),要求输出前三个答案(每一行的棋子所在的列号)以及摆放方法总数


USACO最后一题,再加上题目里宣扬的种种紧张氛围,还给了整整五个提示,我还以为会是一道巨坑,没想到就是简单的回溯,果然是用来检查诚信度的,搞得我都想试试看打表的后果了(笑

/*
ID: frontie1
TASK: checker
LANG: C++
*/
#include <iostream>
#include <cstdio>

using namespace std;

int N;
bool col_fill[15];
bool updia_fill[30];
bool dodia_fill[30];
int answer[15];
int cnt = 0;

void place_row(int r)
{
    if(r == N+1){
        ++cnt;
        if(cnt <= 3){
            printf("%d", answer[1]);
            for(int i = 2; i <= N; ++i){
                printf(" %d", answer[i]);
            }
            printf("\n");
        }
    }
    for(int c = 1; c <= N; ++c){
        if(!col_fill[c] && !updia_fill[r-c+N] && !dodia_fill[r+c]){
            col_fill[c] = updia_fill[r-c+N] = dodia_fill[r+c] = true;
            answer[r] = c;
            place_row(r+1);
            col_fill[c] = updia_fill[r-c+N] = dodia_fill[r+c] = false;
        }
    }
}

int main()
{
    freopen("checker.in", "r", stdin);
    freopen("checker.out", "w", stdout);

    scanf("%d", &N);

    place_row(1);

    printf("%d\n", cnt);

    return 0;
}

P1219 [USACO1.5] 八皇后 Checker Challenge 八皇后问题是一个经典的回溯算法题,要求在n×n棋盘上放置n个互不攻击的皇后。解题要点是使用DFS逐行放置皇后,并通过标记列和对角线避免冲突。程序输出前三个解(按字典序)和解的总数。样例输入6时输出4种解,其中前三个为2 4 6 1 3 5、3 6 2 5 1 4和4 1 5 2 6 3。算法通过回溯和剪枝高效搜索,时间复杂度为O(n!),适用于n≤13的数据范围。 阅读详情

相关推荐

从ST电机库到TI InstaSPIN:手把手对比两种主流FOC实现中的坐标变换差异

本文深入对比了ST电机库与TI InstaSPIN在FOC实现中的坐标变换差异,包括坐标系定义、变换系数和角度处理等关键点。针对BLDC和PMSM电机控制,提供了从理论到实践的移植方案,帮助工程师快速解决平台切换中的性能问题。特别解析了Clarke/Park变换在两种实现中的微妙差异及其对PI控制的影响。

weixin_28724661的博客 398

USACO 6.5 Checker Challenge

Checker Challenge Examine the 6x6 checkerboard below and note that the six checkers are arranged on the board so that one and only one is placed in each row and each column, and there is nev...

weixin_30512043的博客 159

带你一分钟了解电感与磁珠的区别

在电路设计中会经常使用到电感和磁珠,虽然在电路中的作用有所不同,但它们都属于磁性电子元器件,本文简单介绍下电感和磁珠的区别电感和磁珠电感和磁珠的结构主要由磁性材料金属线圈和外壳组成,具体结构如下图所示:电感磁珠结构图电感其实是金属线圈缠绕在磁芯上,而磁珠是在内部折叠后外围包裹着铁氧体磁性材料。电感器(Inductor)又称扼流器、电抗器、动态电抗器是储能器件,能够把电能转化为磁能而存储起来的元件。磁珠则是能量转换(消耗)器件,将流过他的高频信号以热能的形式消耗掉。

攻城狮鹏哥 1409

USACO6.5.5 Checker Challenge( checker)

USACO最后一题,八皇后的类似问题,dfs加优化就可以轻松过了 /* ID:xsy97051 TASK:checker LANG:C++ */ #include #include int n, aim, ans; int a[20]; void dfs(int row, int ld, int rd, int i) { int p, pos; if(row!

xsy_victory的专栏 453

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

pynq-z2 HLS开发

定制Overlay一.用HLS生成一个定制IP功啊啊是合理的创建标题,有助于目录的生成如何改变是式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一.用HLS生成一个定制IP ...

qq_38769280的博客 4156

USACO_1_5_Checker Challenge

读了这题题目后都不敢用java写了,这道题我用的是c++ 这道题需要使用位运算,否则最后一个数据会超时,做一点核心提示,如下图是一个6×6的棋盘,其中有两个位置放置了棋子: _ _ _ _ _ * _ _ _ * _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 现在我们需要在第2行放棋子了(最上面一行是第0行),那么可以...

weixin_30284355的博客 133

银河麒麟V10 SP3系统下如何安全安装gcc-toolset-10(附yum仓库避坑指南)

本文详细介绍了在银河麒麟V10 SP3系统中安全部署gcc-toolset-10的完整方案。核心在于通过配置默认禁用的yum仓库(如EPKL仓库)并配合--enablerepo参数进行精准安装,有效规避依赖冲突风险,实现与系统默认GCC 7.3的稳定共存。文章还提供了多版本环境切换、系统维护及故障排查的实用指南,确保操作的可控与可逆。

h0i1j2k3l的博客 589

C语言经典八皇后问题——DFS,六皇后求解

题目描述 一个如下的 6 \times 66×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。 上面的布局可以用序列 2 4 6 1 3 5 来描述,第 i 个数字表示在第 i 行的相应位置有一个棋子,如下: 行号 1 2 3 4 5 6 列号 2 4 6 1 3 5 这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。 并把它们以上面的序列方法输出,解按字典顺序排列。 请输出前 33个解。最后一行是解的总个数。 输入

s_meng_的博客 6013

思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)

思科路由器重分发(静态路由+OSPF动态路由+RIP动态路由)

2301_81256766的博客 1259

VC中基于TWAIN协议控制扫描仪-----初级版

PS:本人是C++小白一枚,在研究此功能时不知走了多少弯路

a1101000099的专栏 8789

2022-1-10学习总结

上午(3h) 上午刷了两道洛谷的搜索题,遇到的都是之前没有碰到过的题型。经过上午的学习,我发现做题要改变之前的思维,今天上午第一道题一上来我直接就采用了暴力枚举的方式,可是自己又考虑不到那么多种情况,因此浪费了许多时间。因此应该加强自己对搜索题的敏感度,不要看到一个题目就想用暴力。 PERKET 主要思路: 这道题一开始所采用的方法是暴力枚举,ac了一半,是由于这道题用枚举的话需要考虑的情况太多了。任意的组合都可以,只要是绝对差最小,并且有的可能只需要放一种配料,因此这里还是需要..

weixin_63638351的博客 438

双目立体成像(一)双目图片生成点云

利用左右目图片生成点云

qq_62964142的博客 4550

算法分类:DFS 搜索 P1219 [USACO1.5] 八皇后 Checker Challenge

算法分类:DFS 搜索。

andrewcrab的博客 796

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

usaco6.5.5 Checker Challenge

一 原题 Checker Challenge Examine the 6x6 checkerboard below and note that the six checkers are arranged on the board so that one and only one is placed in each row and each column, and there i

max_kibble的博客 373

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

洛谷 P1219 [USACO1.5] 八皇后 Checker Challenge

对于 N = 1 的情况,显然有解,因为只有一个皇后可以放在棋盘的任何位置。在这两种情况下,皇后的数量太少,无法在避开彼此的攻击范围的同时占满每一行。1 1 2 2 3 3这条对角线的特点是 每次i+1 ,j+1。举例 1,2 . 1-2=-1 需要加n 1-2+3=2;对每一行的位置进行判断,如果符合放下皇后的条件,对该位置进行标记 a数组记录第i行的列号。我们可以利用这个特点 来标记这条对角线 这样所有i-j为0的位置都不能放皇后。我们要标记的是 1,2 . 2,3这条线。

2301_78763076的博客 1289

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

P1219 [USACO1.5] 八皇后 Checker Challenge(详解、c++)

的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。并把它们以上面的序列方法输出,解按字典顺序排列。最后一行是解的总个数。上面的布局可以用序列。

2301_77012063的博客 1206

P1219——[USACO1.5]八皇后 Checker Challenge——递归/回溯算法

P1219——[USACO1.5]八皇后 Checker Challenge 题目描述 一个如下的6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。 上面的布局可以用序列 2 4 6 1 3 5 来描述,第 i个数字表示在第 i行的相应位置有一个棋子,如下: 行号 1 2 3 4 5 6 列号 2 4 6 1 3 5 这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。 并把它们以上面的序列方法输出,解按字典顺序排列

m0_51344172的博客 267

USACO Checker Challenge

最简单的N皇后。。。。 Checker Challenge Examine the 6x6 checkerboard below and note that the six checkers are arranged on the board so that one and only one is placed in each row and each column, and

码代码的猿猿 1236

P1219 [USACO1.5] 八皇后 Checker Challenge 题解

P1219 [USACO1.5] 八皇后 Checker Challenge 题解

yaosichengalpha的博客 838

[USACO1.5] 八皇后 Checker Challenge

点个关注吧!

古文波 526

[usaco]1.5 Checker Challenge

拿到题目我的第一反应是八皇后问题,顺利的写出了递归解法,弄完这个,感觉自己写递归和回溯有了一定的进步了,至此第一章做完了,再接再厉。 但是提交后,在13 这个测试样例超时,然后就在想怎么剪枝 之前在判断放棋子是否冲突的时候,是在放的位置往四个方向拓展,如果没有冲突就放 。现在改进为直接判断 和之前放置的棋子是否冲突。对称剪枝,这个在百度之后才知道的 ,这个是关键,直接砍掉一般的时间

雨翔的专栏 526

USACO1.5.4 Checker Challenge跳棋的挑战 解题报告(N皇后 回溯法)

Description 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子。 列号 0 1 2 3 4 5 6 ------------------------- 1 | | O | | | | | ------------------------- 2...

bestsort 839

落谷 P1219 [USACO1.5]八皇后 Checker Challenge 回溯

题目描述 一个如下的 6×66 \times 66×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。 上面的布局可以用序列 2461352\ 4\ 6\ 1\ 3\ 5246135 来描述,第 iii 个数字表示在第 iii 行的相应位置有一个棋子,如下: 行号 1234561...

Hensere的博客 351
上一篇: USACO 6.5.4 The Clocks BFS
下一篇: 【算法及其原理】 Tarjan——求有向图中的强连通分量
Frontier_Setter
博客等级 码龄10年 2粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值