转载自:http://blog.csdn.net/lyhypacm/article/details/5813634

DES:相邻的两盏灯状态可以互换,给出初始状态。询问是否能在三步之内到达。如果能的话。输出不属。超出3步就输出more。

貌似典型应用是位压缩。我觉得各种按位运算用的也很巧妙。判断两盏灯是不是状态一样的时候,和交换状态的时候。先广搜一遍,保存到达各种状态的最短路径,然后查询就可以了。

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
const int maxn=<<; int visi[maxn];
//两点相连,一共有32条边
int a[][]={{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},
{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,},{,}}; void BFS(int p)
{
int i;
visi[p]=;
queue <int> mq;
mq.push(p);
while(!mq.empty())
{
int t=mq.front();
mq.pop();
if(visi[t]>=) continue;
for(i=;i<;i++) //看下可以改变哪两个点
{
int p1,p2;
//表示a[i]灯的状态
p1=t&(<<(a[i][]-));
p2=t&(<<(a[i][]-));
if(p1==p2 || p1&&p2) continue; //两个灯状态一样
p1=t^(<<(a[i][]-));
p2=p1^(<<(a[i][]-)); //两个灯交换状态
if(visi[p2]==-) //如果是其它的值,说明此时步骤不是最小的
{
mq.push(p2);
visi[p2]=visi[t]+;
}
}
}
} int main()
{
int tes;
int x,i,j;
x=(<<)-(<<); //就是最终状态作为起始状态
memset(visi,-,sizeof(visi));
BFS(x);
scanf("%d",&tes);
for(i=;i<=tes;i++)
{
int sum=; //表示状态
for(j=;j<;j++)
{
int tmp;
scanf("%d",&tmp);
if(tmp==)
sum+=<<j;
} printf("Case #%d: ",i);
if(visi[sum]==-) //表示三步之内没达到
puts("more");
else printf("%d\n",visi[sum]);
}
return ;
}

POJ 3220 位运算+搜索的更多相关文章

  1. POJ 1753 位运算+枚举

    题意: 给出4*4的棋盘,只有黑棋和白棋,问你最少几步可以使棋子的颜色一样. 游戏规则是:如果翻动一个棋子,则该棋子上下左右的棋子也会翻一面,棋子正反面颜色相反. 思路: 都是暴搜枚举. 第一种方法: ...

  2. [位运算] [搜索] [递推优化] [计算几何] TEST 2016.7.15

    NOIP2014 提高组模拟试题 第一试试题 题目概况: 中文题目名称 合理种植 排队 科技节 源程序文件名 plant.pas/.c/.cpp lineup.pas/.c/.cpp scifest. ...

  3. [CODEVS1295]N皇后(位运算+搜索)

    题目描述 Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任 ...

  4. POJ - 3074 Sudoku (搜索)剪枝+位运算优化

    In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 × 3 subgrids. For exa ...

  5. acm位运算应用 搜索

    acm位运算应用 搜索 搜索    此处不讲题目,只讲位运算是怎样在这些题中实现和应用的.由于搜索题往往是基于对状态的操作,位运算往往特别有效,优化之后的效果可以有目共睹.    例1.POJ 132 ...

  6. POJ 2531 Network Saboteur 位运算子集枚举

    题目: http://poj.org/problem?id=2531 这个题虽然是个最大割问题,但是分到dfs里了,因为节点数较少.. 我试着位运算枚举了一下,开始超时了,剪了下枝,1079MS过了. ...

  7. POJ 2777 Count Color(线段树+位运算)

    题目链接:http://poj.org/problem?id=2777 Description Chosen Problem Solving and Program design as an opti ...

  8. poj 2777 Count Color - 线段树 - 位运算优化

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42472   Accepted: 12850 Description Cho ...

  9. [poj]开关类问题 枚举 位运算

    poj 1222  EXTENDED LIGHTS OUT 开关只有两种方案 按和不按,按两次相当于关 只用枚举第一排开关的按法即可,剩下的行为使上一排的灯全部关闭,按法可以确定,并且是唯一的. 最后 ...

随机推荐

  1. 20145127《java程序设计》第四周学习总结

    教材学习内容总结 第六章 继承与多态 6.1 何为继承 0.面向对象中,子类继承父类,避免城府的行为定义.正确判断使用继承的时机,以及继承之后如何活用多态,才是学习继承时的重点. 1.继承:避免多个类 ...

  2. 20145216史婧瑶《网络对抗》Web安全基础实践

    20145216史婧瑶<网络对抗>Web安全基础实践 实验问题回答 (1)SQL注入攻击原理,如何防御 攻击原理: SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些 ...

  3. JavaScript:值类型 引用类型

    JavaScript类型 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数.  1.string var str="hongda"; v ...

  4. [luogu 1070]道路游戏(NOIP2009T4)

    题目链接 题解: 题目描述好长啊.... 大概就是设一下$f[i]$表示第i秒的最大价值 首先枚举时间,然后因为机器人这一秒无论在哪里都是有可能的,所以要枚举一下每个点,又因为最多走p秒所以再枚举一下 ...

  5. 51nod 1243 排船的问题(二分)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1243 题意: 思路: 二分来做,每次贪心的把船安排到能安排的最左边即可. ...

  6. ng-model 数据不更新 及 ng-repeat【ngRepeat:dupes】错误

    一.ng-include 引入的文件中 ,ng-model 数据不更新 例如, $scope.username = “Jones”  .此时,在 ng-include 引入的文件中,直接使用 ng-m ...

  7. 为什么Rebase是有害的

    Rebase Considered Harmful Merge的两种方式 向上游提交"干净"的patch.不包含历史信息--日常提交.BUG fix.与上游的Merge记录等.就如 ...

  8. ros python 重置位置

    #!/usr/bin/env python import rospy import math import sys import commands import yaml from tf import ...

  9. AES SBox的构造(python)

    几点需要注意的,求解逆元的时候使用的是拓展欧几里得,但是那些运算规则需要变一变,模2的加减乘除(或者可以理解为多项式的运算) 在进行字节的仿射变换不用进行矩阵的运算. 一个矩阵和一个列向量进行运算的时 ...

  10. python调用虹软2.0第三版

    这一版,对虹软的功能进行了一些封装,添加了人脸特征比对,比对结果保存到文件,和从文件提取特征进行比对,大体功能基本都已经实现,可以进行下一步的应用开发了 face_class.py from ctyp ...