UVa 11085 - Back to the 8-Queens
题目:给你一个棋盘上的八个皇后。每行一个。如今让他们互相不攻击,每一个皇后仅仅能竖着移动,
一次能够移动到本列的不论什么位置,问最少移动几步。能满足要求。
分析:搜索,八皇后。由于八皇后仅仅有92组解,直接计算出92组解,然后找出不在相应最少的一组解。
这里我使用了位运算来计算八皇后。降低代码量。
先考虑一个皇后的影响,每次下一层攻击的点和上一次的关系例如以下:
一个皇后会影响自己下方和左右两个斜的方向(从上往下搜索);
向左的斜的影响下一层向左移动一位,向右的影响向右移动一位;
因此。我们把三种影响分别用位表示。
L,M,R各自是三种情况的。之前全部皇后能攻击的点的位表示。
假设本次取第i个元素则三个元素相应位:
L =(L|(1<<i))<<1,M|(1<<i)。(R|(1<<i))>>1。
这里我是枚举选取的元素,能够利用位运算求出最后的可用位(-p&p)。
只是展开时麻烦点(由于是2^i,不是i)。
说明:注意回溯要保存状态。好久么刷题了╮(╯▽╰)╭。
#include <cstdlib>
#include <cstring>
#include <cstdio> int ans[92][8], temp[8], size = 0; void dfs(int d, int L, int M, int R)
{
if (d == 8) {
size ++;
return;
}
for (int i = 0; i < 8; ++ i)
if (((L|M|R)&(1<<i)) == 0) {
for (int j = 0; j < d; ++ j)
temp[j] = ans[size][j];
ans[size][d] = i+1;
dfs(d+1, (L|(1<<i))<<1, M|(1<<i), (R|(1<<i))>>1);
for (int j = 0; j < d; ++ j)
ans[size][j] = temp[j];
}
} int main()
{
size = 0;
dfs(0, 0, 0, 0); int cases = 1;
while (~scanf("%d",&temp[0])) {
for (int i = 1; i < 8; ++ i)
scanf("%d",&temp[i]); int min = 8;
for (int i = 0; i < size; ++ i) {
int count = 8;
for (int j = 0; j < 8; ++ j)
count -= (temp[j]==ans[i][j]);
if (min > count)
min = count;
} printf("Case %d: %d\n",cases ++,min);
}
return 0;
}
UVa 11085 - Back to the 8-Queens的更多相关文章
- UVa 750 - 8 Queens Chess Problem
题目大意:八皇后问题,在一个8*8的棋盘上,放置8个皇后,使得任意两个皇后不在同一行上.不在同一列上.不在同一条对角线上,不过这道题预先给定了一个位置放置一个皇后,让你输出所有可能的答案. 经典的回溯 ...
- Uva 11538 - Chess Queen
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- uva 11195 Another queen (用状态压缩解决N后问题)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- UVA数学入门训练Round1[6]
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...
随机推荐
- 贰、js的基础(一)
1.js的语法 a.区分大小写 b.弱类型变量:变量无特定类型 c.每行结尾的分号可有可无 d.括号用于代码块 e.注释的方法与c语言和java相同 2.变量 注意事项: a.通过关键字var来声明. ...
- git 常用操作命令行
mkdir files : 创建一个名字为files的文件夹 cd files : 切换目录到files pwd ; 显示当前所在目录 ls -ah : 查看本地隐藏不可见的文件夹 git init ...
- java 导出百万数据到excel
@RequestMapping("export") public void write(HttpServletRequest request,HttpServletResponse ...
- springMVC 定时器配置
1.在springMVC中加入 xmlns:task="http://www.springframework.org/schema/task" http://www.springf ...
- ajaxFileUpload 返回的数据报错
$.ajaxFileUpload({ url : '/updateMallGoods', data : { "goodsName":goodsName, "proDesc ...
- Docker本地私有仓库实战
Docker仓库主要用于存放Docker镜像,Docker仓库分为公共仓库和私有仓库,基于registry可以搭建本地私有仓库,使用私有仓库的优点如下: 1)节省网络带宽,针对于每个镜像不用去Dock ...
- 学习CV:《OpenCV 3计算机视觉Python语言实现第2版》中文PDF+英文PDF+代码
理解与计算机视觉相关的算法.模型以及OpenCV 3 API背后的基本概念,有助于开发现实世界中的各种应用程序(比如:安全和监视领域的工具). OpenCV 3是一种先进的计算机视觉库,可以用于各种图 ...
- 洛谷 P1045 麦森数 (快速幂+高精度+算位数骚操作)
这道题太精彩了! 我一开始想直接一波暴力算,然后叫上去只有50分,50分超时 然后我改成万位制提高运算效率,还是只有50分 然后我丧心病狂开long long用10的10次方作为一位,也就是100亿进 ...
- QT跟VC++结合来进行插件的验证机制(遍历vtable,保证虚函数的个数一致,也可使用Q_INVOKABLE宏定义)
由于最近公司要开发一个以C++插件机制为主的,主要有一个问题就是C++的二进制兼容性的问题.一旦类使用虚函数,只要随便改动下增删查改下头文件的虚函数,就会导致程序在跑的时候进行乱跳,因为这个时候exe ...
- Java中泛型的各种使用
Java中的泛型的使用: 1.普通的泛型使用 在使用类的时候后面的<>中的类型就是我们确定的类型. public class MyClass1<T> {//此处定义的泛型是T ...