题目:给你一个棋盘上的八个皇后。每行一个。如今让他们互相不攻击,每一个皇后仅仅能竖着移动,

一次能够移动到本列的不论什么位置,问最少移动几步。能满足要求。

分析:搜索,八皇后。由于八皇后仅仅有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的更多相关文章

  1. UVa 750 - 8 Queens Chess Problem

    题目大意:八皇后问题,在一个8*8的棋盘上,放置8个皇后,使得任意两个皇后不在同一行上.不在同一列上.不在同一条对角线上,不过这道题预先给定了一个位置放置一个皇后,让你输出所有可能的答案. 经典的回溯 ...

  2. Uva 11538 - Chess Queen

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  3. uva 11195 Another queen (用状态压缩解决N后问题)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  5. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  6. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  7. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  8. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  9. 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 ...

随机推荐

  1. BZOJ 3790 神奇项链(回文自动机+线段树优化DP)

    我们预处理出来以i为结尾的最长回文后缀(回文自动机的构建过程中就可以求出)然后就是一个区间覆盖,因为我懒得写贪心,就写了线段树优化的DP. #include<iostream> #incl ...

  2. Pimple相关的源码

    已经有了非常好的Pimple的相关解析,建议先看下:Pimple - 一个简单的 PHP 依赖注入容器读 PHP - Pimple 源码笔记(上)读 PHP - Pimple 源码笔记(下) 这里通过 ...

  3. 关于ValueAnimation以及Interpolator +Drawable实现的自己定义动画效果

    ValueAnimation : Android中的属性动画,他跟objectAnimation是比补间动画拥有更强大的功能,能够操作对象.所以我们能够在自 定义View中通过他们来实现些特别的功能. ...

  4. Mysql信息数据库:Information_schema

    1. Information_schema information_schema是mysql的信息数据库. 通过该库能够查看mysql以下的数据库,表.权限等信息. 在数据库中会默认生成这个库.inf ...

  5. AVEVA PDMS to DIALux

    AVEVA PDMS to DIALux eryar@163.com   Abstract. DIAL develops DIALux - the world's leading software f ...

  6. BootStrap有用代码片段(持续总结)

    > 如题.持续总结自己在使用BootStrap中遇到的问题.并记录解决方法.希望能帮到须要的小伙伴 1.bootstrap上下布局.顶部固定下部填充 应用场景:经典上下布局中,顶部导航条固定,下 ...

  7. BZOJ1468: Tree & BZOJ3365: [Usaco2004 Feb]Distance Statistics 路程统计

    [传送门:BZOJ1468&BZOJ3365] 简要题意: 给出一棵n个点的树,和每条边的边权,求出有多少个点对的距离<=k 题解: 点分治模板题 点分治的主要步骤: 1.首先选取一个点 ...

  8. 安卓操作sqlite3,增删改查

    创建 layout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  9. Android JNI和NDK学习(09)--JNI实例二 传递类对象

    1 应用层代码 NdkParam.java是JNI函数的调用类,它的代码如下:   package com.skywang.ndk; import android.app.Activity; impo ...

  10. 32.AngularJS 表达式

    转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 表达式写在双大括号内:{{ expression }}. AngularJS 表达式把数据 ...