又是一道状压搜索,题解有的是状压DP做的目前不会日后补

写好了以后一直蜜汁WA,看别人代码把判断再次回到原点的语句写在了Q.pop()之后而不是for里,对我也是一种启发吧这样写确实有好处比如起点就是答案的情况也能处理,很方便,我i改过之后就A了。

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f;
bool vis[22][22][(1<<16)+1];
char e[22][22];
int nut[22][22];
int N,M,Count,ans;
int fx[8][2]={1,0,-1,0,0,1,0,-1,1,-1,1,1,-1,1,-1,-1};
struct node
{
    int x,y,hal,bs;
    node(){}
    node(int x,int y,int hal,int bs):x(x),y(y),hal(hal),bs(bs){}
};
void bfs(int sx,int sy)
{
  memset(vis,0,sizeof(vis));
  queue<node>Q;
  node t1(sx,sy,0,0),t2;
  Q.push(t1);
  vis[sx][sy][0]=1;
  while(!Q.empty()){
      t1=Q.front();  Q.pop();
      if(e[t1.x][t1.y]=='L'&&t1.hal==ans) {cout<<t1.bs<<endl;return;}
      for(int i=0;i<8;++i){
        t2.x=t1.x+fx[i][0];
        t2.y=t1.y+fx[i][1];
        t2.bs=t1.bs+1;
        t2.hal=t1.hal;
        if(t2.x>0&&t2.y>0&&e[t2.x][t2.y]=='#') t2.hal=(t2.hal|(1<<nut[t2.x][t2.y]));
        if(t2.x<1||t2.y<1||t2.x>N||t2.y>M||vis[t2.x][t2.y][t2.hal]) continue;
        vis[t2.x][t2.y][t2.hal]=1;
        Q.push(t2);
      }
  }
}
int main()
{
    int i,j,k;
    while(scanf("%d%d",&N,&M)!=EOF){Count=0;
    int sx,sy;
    memset(e,0,sizeof(e));
    memset(nut,-1,sizeof(nut));
        for(i=1;i<=N;++i)
           for(j=1;j<=M;++j){
            scanf(" %c",&e[i][j]);
            if(e[i][j]=='L') {sx=i;sy=j;}
            else if (e[i][j]=='#'){
                nut[i][j]=Count++;
            }
        }
        if(Count==0) {puts("0");continue;}
        ans=(1<<Count)-1;
        bfs(sx,sy);
    }
    return 0;
}

/*
5 5
L....
#....
#....
.....
#....
*/

uva10944 状态压缩bfs or DP的更多相关文章

  1. 胜利大逃亡(续)(状态压缩bfs)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  2. hdu 3681 Prison Break(状态压缩+bfs)

    Problem Description Rompire . Now it’s time to escape, but Micheal# needs an optimal plan and he con ...

  3. POJ 3411 Paid Roads (状态压缩+BFS)

    题意:有n座城市和m(1<=n,m<=10)条路.现在要从城市1到城市n.有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱, 如果没有去过就付R的钱.求的是最少要花 ...

  4. 【HDU - 1429】胜利大逃亡(续) (高级搜索)【状态压缩+BFS】

    Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)…… 这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方.刚开 ...

  5. POJ 1753 Flip Game (状态压缩 bfs+位运算)

    Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...

  6. HDU 5025 Saving Tang Monk 【状态压缩BFS】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5025 Saving Tang Monk Time Limit: 2000/1000 MS (Java/O ...

  7. POJ - 1324 Holedox Moving (状态压缩+BFS/A*)

    题目链接 有一个n*m(1<=n,m<=20)的网格图,图中有k堵墙和有一条长度为L(L<=8)的蛇,蛇在移动的过程中不能碰到自己的身体.求蛇移动到点(1,1)所需的最小步数. 显然 ...

  8. 「hdu 4845 」拯救大兵瑞恩 [CTSC 1999](状态压缩bfs & 分层图思想)

    首先关于分层图思想详见2004的这个论文 https://wenku.baidu.com/view/dc57f205cc175527072208ad.html 这道题可以用状态压缩,我们对于每一把钥匙 ...

  9. [HNOI2006]最短母串问题(AC自动机+状态压缩+bfs)

    快要THUSC了,来水几道模板题吧. 这题其实是AC自动机模板.看到长度最短,首先就想到AC自动机.那么就直接暴力法来吧,把每个串建立在AC自动机上,建立fail指针,然后由于n<=12,可以把 ...

随机推荐

  1. AWR之-enq TX - row lock contention的性能故障-转

    1 对这一个小时进行AWR的收集和分析,首先,从报告头中看到DB Time达到近500分钟,(DB Time)/Elapsed=8,这个比值偏高:   Snap Id Snap Time Sessio ...

  2. 服务器为什么这么慢?耗尽了CPU、RAM和磁盘I/O资源

    机器运行缓慢通常是由于消耗了太多系统特定的资源.系统的主要资源包括CPU.RAM.磁盘I/O以及网络.过度使用这些资源的任何一种都会让系统陷入困境.不过,如果能登录到系统之中,可以借助大量工具确定问题 ...

  3. Python 面向对象 类 __str__

    class dog(object): def __init__(self,name): self.name = name d = dog('mike') print(d) # <__main__ ...

  4. Openstack(十一)部署网络服务neutron(控制节点)

    11.1neutron服务介绍 neutron是openstack的网络组件,是OpenStack的网络服务,Openstack在2010年正式发布它的第一个版本Austin的时候,nova-netw ...

  5. [css]浮动造成的影响

    浮动造成的影响: 子元素浮动,父元素无法被撑出高了. 如果要给父元素做通栏background? 如果两个box的子元素都浮动,且希望两个box分行显示? box1 box2 box3: float: ...

  6. django-生成随机验证码

    Python生成随机验证码,需要使用PIL模块. 安装: pip3 install pillow 1   1 pip3 install pillow 基本使用 1.创建图片 from PIL impo ...

  7. bzoj1297 / P4159 [SCOI2009]迷路

    P4159 [SCOI2009]迷路 如果边权只有 0/1 那么不就是一个灰常简单的矩阵快速幂吗! 然鹅边权 $<=9$ 所以我们把每个点拆成9个点! 解决~ #include<iostr ...

  8. 期末总结20135320赵瀚青LINUX内核分析与设计期末总结

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对LINUX内核分析与设计这 ...

  9. 20155201 实验三《Java面向对象程序设计》实验报告

    20155201 实验三<Java面向对象程序设计>实验报告 一.实验内容 XP基础 XP核心实践 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门 ...

  10. 日志自定义Tag

    import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentHashMap; /** * Crea ...