#include<stdio.h>

#include<string.h>//通过只记录每一步此时点的状态。题非常好

#include<queue>

using namespace std;

#define N 110

int map[N][N][30];//一共最多16种状态,记录状态和此时已得到宝物的多少

char ma[N][N];//读入

struct node {

int x,y,t,h;

};

int chu[N][N];//记录刚开始宝物每个点的宝物的数量

int n,m,total;//total表示得到所有宝物时的状态

int dis[4][2]={1,0,-1,0,0,1,0,-1};//四个方向

int judge(node start) {//判断是否越界

if(start.x<1||start.x>n||start.y<1||start.y>m)

return 0;

return 1;

}

int bfs(node start) {

int i;

queue<node>q;

node cur,next;

memset(map,0,sizeof(map));

start.h=chu[start.x][start.y];

start.t=0;

q.push(start);

map[start.x][start.y][start.h]=1;//初始化

while(!q.empty()) {

cur=q.front ();

if(cur.h==total) 

return cur.t;

q.pop ();

for(i=0;i<4;i++) {

next.x=cur.x+dis[i][0];

next.y=cur.y+dis[i][1];

next.t=cur.t+1;

if(judge(next)) {

next.h=cur.h|chu[next.x][next.y];

if(map[next.x][next.y][next.h]==0&&ma[next.x][next.y]!='#') {//记录不是墙时的状态

map[next.x][next.y][next.h]=1;//这个状态已走过

q.push (next);

}

}

}

}

return -1;

}

int main(){

int i,j,r,a,b,k;

while(scanf("%d%d",&n,&m),n||m) {

for(i=1;i<=n;i++)

scanf("%s",ma[i]+1);

node start;

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

if(ma[i][j]=='@') {//找起始点

start.x=i;

start.y=j;

}

scanf("%d",&k);

memset(chu,0,sizeof(chu));

r=1; total=0;

for(i=1;i<=k;i++) {

total=total|r;

scanf("%d%d",&a,&b);

chu[a][b]=r;

r*=2;

}

  printf("%d\n",bfs(start));

}

return 0;

}

hdu 4771好题的更多相关文章

  1. hdu 4771 Stealing Harry Potter&#39;s Precious(bfs)

    题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...

  2. HDU-1042-N!(Java大法好 &amp;&amp; HDU大数水题)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Subm ...

  3. HDU 4771 Stealing Harry Potter's Precious (2013杭州赛区1002题,bfs,状态压缩)

    Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  4. HDU 4771

    http://acm.hdu.edu.cn/showproblem.php?pid=4771 给一个地图,@是起点,给一些物品坐标,问取完所有物品的最小步数,不能取完输出-1 物品数最多只有四个,状态 ...

  5. HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)

    前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU ...

  6. hdu 5326(基础题) work

    http://acm.hdu.edu.cn/showproblem.php?pid=5326 一道水题,题目大意是在公司里,给出n个员工和目标人数m,然后下面的n-1行是表示员工a管理b,问在这些员工 ...

  7. 【转载】 HDU 动态规划46题【只提供思路与状态转移方程】

    1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包;第一次做的时候把概率当做背包(放大100000倍化为整数) ...

  8. hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@'  表示的是起点,'#' 表示的是障碍物不能通过,'.'  表示的是路能通过的: ...

  9. hdu 5162(水题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5162 题解:看了半天以为测试用例写错了.这题玩文字游戏.它问的是当前第i名是原数组中的第几个. #i ...

随机推荐

  1. 转-CoreText 使用教程

    转自:http://www.dapps.net/dev/iphone/how-to-create-a-simple-magazine-app-with-core-text.html Core Text ...

  2. Oracle本地动态 SQL

    本地动态 SQL 首先我们应该了解什么是动态 SQL,在 Oracle数据库开发 PL/SQL块中我们使用的 SQL 分为:静态 SQL语句和动态 SQL语句.所谓静态 SQL指在 PL/SQL块中使 ...

  3. Partial(部分方法,局部方法),virtual(虚方法),abstract(抽象方法)

    Partial 部分方法顾明思议是方法的一部分,不完整的,在ide编译时候,会将所有部分方法加载到一起统一编译,如果分部方法没有被实现,编译器就不会.对他们进行编译. 局部类型的限制 (1) 局部类型 ...

  4. AJPFX关于TreeSet集合的介绍

    需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台.分析:1.创建键盘录入对象:          2.创建TreeSet集合,使用匿名内部类实现Compa ...

  5. java之java.lang.UnsupportedClassVersionError:com/mysql/jdbc/Driver : Unsupported major.minor version 52.0

    问题解释:jdk版本和mysql驱动版本不兼容,比如:jdk1.7与mysql-connector-java-5.xxx兼容,但与mysql-connector-java-6.xxx及以上不兼容

  6. C#代码规范(简版)

    C#项目代码规范 目的 1.方便代码的交流和维护. 2.不影响编码的效率,不与大众习惯冲突. 3.使代码更美观.阅读更方便. 4.使代码的逻辑更清晰.更易于理解. 在C#中通常使用的两种编码方式如下 ...

  7. VUE 入坑系列 一 事件

    html代码 <div id="app"> <button v-on:click="counter += 1">加1</butto ...

  8. Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明 下一篇:Farseer.net轻量级ORM开源框架 ...

  9. git的使用 及一些常见的错误处理

    git安装使用 添加文件到Git仓库,分两步: 1.使用命令git add <file>,注意,可反复多次使用,添加多个文件: 2.使用命令git commit -m <messag ...

  10. chfn - 改变你的finger讯息

    总览 SYNOPSIS chfn [ -f full-name ] [ -o office ] [ -p office-phone ] [ -h home-phone ] [ -u ] [ -v ] ...