又是一道状压搜索,题解有的是状压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. Mac下通过远程桌面向Windows发送Ctrl+Alt+Delete

    今天在Mac中通过远程桌面给Windows安装Git Extensions,在安装程序自动关闭资源管理器时,Windows无响应,桌面显示黑屏.于是,想通过Ctrl+Alt+Delete快捷键调出对话 ...

  2. JavaCollection Java 集合框架

    Spring Injecting Collection https://www.tutorialspoint.com/spring/spring_injecting_collection.htm No ...

  3. mongdb ---shard

    http://blog.fens.me/mongodb-shard/ https://segmentfault.com/a/1190000004263332 1. 和用户管理相关的操作基本都要在adm ...

  4. 经验搜索排名---google已经做过类似的了(我想多了)

    由于编程的原因,我们需要经常的查资料,现在转载的文章比较多,我们经常看到的搜索结果的前十名基本上有7名是转载的.这样看起来很没有效率,后来突然想到,如果把大家的浏览结果搜集起来,然后进行权重排名,这样 ...

  5. xml转为array

    PHP实现微信支付,微信支付宝返回的xml结果如下: <xml>   <appid><![CDATA[wx2421b1c4370ec43b]]></appid ...

  6. 怎样使用CSS设置文字与文字间距距离?

    [文字与文字间距距离,字与字距离间距CSS如何设置?]如果你也遇到W3Cschool用户唐婷大小姐类似的问题不妨也到W3Cschool编程问答进行提问. 对于使用CSS解决字间距的方法W3Cschoo ...

  7. 在Mybatis中使用连表查询的一次实际应用

    以前在工作中很少使用多表关联查询,对连表查询的具体作用和使用场景也没有很直观的认识,通过这次在项目中的实际应用,对此有了一定的认识,特记录如下. 关联表介绍: 分别是属性表attr_info.属性值表 ...

  8. DNS服务器配置实践

    实验背景:在Linux系统上配置主要DNS服务器和辅助DNS服务器,所在域名为example.com,子网为192.168.X.0. 启动已安装LINUX系统,进行DNS服务器配置. 一.配置主要DN ...

  9. 文件名含中文的JavaWeb文件下载

    在javaweb项目中实现文件下载,当文件名中包含中文文字时,需要进行如下的处理,才能在浏览器端正常显示中文文件名: response.setContentType("octets/stre ...

  10. spring AOP的两种代理

    本篇记录下spring AOP的两种代理,为下一篇AOP实现做下铺垫. 1.JDK动态代理  2.cglib代理 1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP2.如果目标对象 ...