ACM-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 never more than one in any diagonal. (Diagonals run from southeast to northwest and southwest to northeast and include all diagonals, not just the major two.)
Column
1 2 3 4 5 6
-------------------------
1 | | O | | | | |
-------------------------
2 | | | | O | | |
-------------------------
3 | | | | | | O |
-------------------------
4 | O | | | | | |
-------------------------
5 | | | O | | | |
-------------------------
6 | | | | | O | |
-------------------------
The solution shown above is described by the sequence 2 4 6 1 3 5, which gives the column positions of the checkers for each row from 1 to 6:
ROW | 1 | 2 | 3 | 4 | 5 | 6 |
COLUMN | 2 | 4 | 6 | 1 | 3 | 5 |
This is one solution to the checker challenge. Write a program that finds all unique solution sequences to the Checker Challenge (with ever growing values of N). Print the solutions using the column notation described above. Print the the first three solutions in numerical order, as if the checker positions form the digits of a large number, and then a line with the total number of solutions.
Special note: the larger values of N require your program to be especially efficient. Do not precalculate the value and print it (or even find a formula for it); that's cheating. Work on your program until it can solve the problem properly.
输入
A single line that contains a single integer N (6 <= N <= 13) that is the dimension of the N x N checkerboard.
输出
The first three lines show the first three solutions found, presented as N numbers with a single space between them. The fourth line shows the total number of solutions found.
样例输入
6
样例输出
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
解题思路:N皇后问题,一般的DFS会超时,用位运算才可以A。
////// Checker Challenge.cpp : 定义控制台应用程序的入口点。
//////
////
#include "stdafx.h"
////
////
////#include <stdio.h>
////#include <math.h>
////#include <string.h>
////
////int n, ans;
////int res[15],save[15];
////
////struct R
////{
//// int r[15][15];
////
////}R[15];
////
////void DFS(int i)
////{
//// if (i == n)
//// {
//// ans++;
//// if (ans <= 3)
//// {
//// memcpy(R[n].r[ans-1], res, sizeof(res));
//// }
//// return;
//// }
////
//// for (int k = 0; k < n; k++)//遍历所有列
//// {
//// int j;
//// for (j = 0; j < i; j++)//和已经放好的皇后位置比较
//// {
//// if (k == res[j]) break;
//// if (abs(k - res[j]) == i - j) break;
//// }
//// if (j >= i)
//// {
//// res[i] = k;
//// DFS(i + 1);
//// }
//// }
////}
////
////int main()
////{
//// for (n = 0; n <= 13; n++)
//// {
//// ans = 0;
//// DFS(0);
//// save[n] = ans;
////
//// }
//// while (scanf("%d",&n)!=EOF)
//// {
////
//// for (int j = 0; j < 3; j++)
//// {
//// for (int i = 0; i < n; i++)
//// {
//// if (i != n-1) printf("%d ", R[n].r[j][i] + 1);
////
//// else printf("%d\n", R[n].r[j][i] + 1);
//// }
//// }
//// printf("%d\n", save[n]);
////
//// }
////} //简化的思想:
//用位运算代替for循环遍历每个皇后的位置
//用垂直、对角线、斜对角线的位运算 /*整个逻辑:
//1.求将要放入皇后的位置
//2.更新可放皇后的位置
//3.DFS循环*/ #include <stdio.h> int n,ans,uplimit,res[]; int binary2(int num)
{
int ans = ;
while (num)
{
num = num >> ;
ans++;
}
return ans;
} void DFS(int i,int vertical, int diagonal, int antidiagonal)
{
if (i >= n)
{
ans++;
if (ans <=)
{
//输出结果
for (int i = ; i < n; i++)
{
if (i != n-) printf("%d ", res[i]);
else printf("%d\n", res[i]);
}
}
return;
}
int avail = uplimit & (~(vertical | diagonal | antidiagonal));
while (avail)
{
int pos = avail & (-avail);
avail = avail - pos;
res[i] = binary2(pos);
DFS(i + ,vertical + pos, (diagonal + pos) << , (antidiagonal + pos) >> );
} } int main()
{
while (scanf("%d", &n) != EOF)
{
ans = ;
uplimit = ( << n) - ;
DFS(, , , );
printf("%d\n", ans);
}
return ;
}
ACM-Checker Challenge的更多相关文章
- USACO1.5 Checker Challenge(类n皇后问题)
B - B Time Limit:1000MS Memory Limit:16000KB 64bit IO Format:%lld & %llu Description E ...
- USACO 6.5 Checker Challenge
Checker Challenge Examine the 6x6 checkerboard below and note that the six checkers are arranged on ...
- 『嗨威说』算法设计与分析 - 回溯法思想小结(USACO-cha1-sec1.5 Checker Challenge 八皇后升级版)
本文索引目录: 一.回溯算法的基本思想以及个人理解 二.“子集和”问题的解空间结构和约束函数 三.一道经典回溯法题点拨升华回溯法思想 四.结对编程情况 一.回溯算法的基本思想以及个人理解: 1.1 基 ...
- TZOJ 3522 Checker Challenge(深搜)
描述 Examine the 6x6 checkerboard below and note that the six checkers are arranged on the board so th ...
- USACO 1.5.4 Checker Challenge跳棋的挑战(回溯法求解N皇后问题+八皇后问题说明)
Description 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子. 列号 0 1 2 3 4 5 6 ...
- Checker Challenge跳棋的挑战(n皇后问题)
Description 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子. 列号 0 1 2 3 4 5 6 ...
- USACO training course Checker Challenge N皇后 /// oj10125
...就是N皇后 输出前三种可能排序 输出所有可能排序的方法数 vis[0][i]为i点是否已用 vis[1][m+i]为i点副对角线是否已用 m+i 为从左至右第 m+i 条副对角线 vis[1] ...
- N皇后问题2
Description Examine the checkerboard below and note that the six checkers are arranged on the board ...
- USACO 完结的一些感想
其实日期没有那么近啦……只是我偶尔还点进去造成的,导致我没有每一章刷完的纪念日了 但是全刷完是今天啦 讲真,题很锻炼思维能力,USACO保持着一贯猎奇的题目描述,以及尽量不用高级算法就完成的题解……例 ...
随机推荐
- java并发初探ConcurrentHashMap
java并发初探ConcurrentHashMap Doug Lea在java并发上创造了不可磨灭的功劳,ConcurrentHashMap体现这位大师的非凡能力. 1.8中ConcurrentHas ...
- Linux CentOS7 VMware 环境变量PATH、cp命令、mv命令、文档查看cat/more/less/head/tail——笔记
一.环境变量PATH PATH一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径. 命令在这几个目录里面就不需要敲绝对路径 echo $PATH 例子:把/tmp/ 加到 $PA ...
- 阿里RocketMq试用记录+简单的Spring集成
CSDN学院招募微信小程序讲师啦 程序猿全指南,让[移动开发]更简单! [观点]移动原生App开发 PK HTML 5开发 云端应用征文大赛,秀绝招,赢无人机! 阿里RocketMq试用记录+简单的S ...
- IdentityServer4专题之七:Authorization Code认证模式
(1)identityserver4授权服务器端 public static class Config { public static IEnumerable<IdentityResource& ...
- 有关WordPress的Rss导入指南
我是用cublog转过来.有一个软件博客备份软件(blog_backup)可以备份那个的blog.我用他备份后导出成rss2的文件.但我导入了很多次不成功.后来发现,原来blog_backup导出的格 ...
- 初级入门 --- web GL绘制点
" 万丈高楼平地起." 01基础知识 一.相关术语 图元 :WebGL 能够绘制的基本图形元素,包含三种:点.线段.三角形. 片元:可以理解为像素,像素着色阶段是在片元着色器中. ...
- NFS PersistentVolume【转】
上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...
- mysql 权限管理 grant revoke
grant all privileges on database.table to 'user'@'ip' identified by 'passwd' with grant option; g ...
- Day5 - B - Wireless Network POJ - 2236
An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...
- 【转】转帖并注释:Java中的事件处理机制--事件监听器的四种实现方式
原文地址:http://blog.sina.com.cn/s/blog_4b650d650100nqws.html Java中四种事件监听器的实现方式分别为: 自身类做为事件监听器 外部类作为事件监听 ...