状态压缩+BFS,一次AC。

 /* 1885 */
#include <iostream>
#include <queue>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std; #define MAXN 105 bool visit[MAXN][MAXN][]; typedef struct node_t {
int x, y, t, k;
node_t() {}
node_t(int xx, int yy, int tt, int kk) {
x = xx; y = yy; t = tt; k = kk;
}
} node_t; int n, m;
node_t beg;
char map[MAXN][MAXN];
int dir[][] = {
-,,,,,-,,
}; inline bool check(int x, int y) {
return x< || x>=n || y< || y>=m;
} int bfs() {
int i, j, k;
int x, y, t;
node_t nd;
queue<node_t> Q; memset(visit, false, sizeof(visit));
visit[beg.x][beg.y][beg.k] = true;
Q.push(beg); while (!Q.empty()) {
nd = Q.front();
Q.pop();
t = nd.t + ;
for (i=; i<; ++i) {
x = nd.x + dir[i][];
y = nd.y + dir[i][];
if (check(x, y) || map[x][y]=='#')
continue;
if (map[x][y] == 'X')
return t;
k = nd.k;
if (map[x][y]>='A' && map[x][y]<='D') {
j = map[x][y] - 'A';
if ((nd.k & (<<j)) == )
continue;
} else if (map[x][y]>='a' && map[x][y]<='d') {
j = map[x][y] - 'a';
k |= (<<j);
}
if (visit[x][y][k])
continue;
visit[x][y][k] = true;
Q.push(node_t(x, y, t, k));
}
} return -;
} int main() {
int i, j, k; #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif beg.k = beg.t = ;
while (scanf("%d%d",&n,&m)!=EOF && (n||m)) {
for (i=; i<n; ++i) {
scanf("%s", map[i]);
for (j=; j<m; ++j) {
if (map[i][j] == '*') {
beg.x = i;
beg.y = j;
} else if (map[i][j] == 'Y') {
map[i][j] = 'A';
} else if (map[i][j] == 'R') {
map[i][j] = 'C';
} else if (map[i][j] == 'G') {
map[i][j] = 'D';
} else if (map[i][j] == 'y') {
map[i][j] = 'a';
} else if (map[i][j] == 'r') {
map[i][j] = 'c';
} else if (map[i][j] == 'g') {
map[i][j] = 'd';
}
}
}
k = bfs();
if (k < )
puts("The poor student is trapped!");
else
printf("Escape possible in %d steps.\n", k);
} return ;
}

【HDOJ】1885 Key Task的更多相关文章

  1. hdu 1885 Key Task

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Description The Czech Technical Univers ...

  2. HDU 1885 Key Task (带门和钥匙的迷宫搜索 bfs+二进制压缩)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1885 Key Task Time Limit: 3000/1000 MS (Java/Others)  ...

  3. 【C#】线程之Task

    Task开启线程 有两种启动方式: 1.构造创建线程,然后启动 var taskForAction = new Task(() => { //do something }); taskForAc ...

  4. HDU 1885 Key Task 国家压缩+搜索

    点击打开链接 Key Task Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. 【CodeForces】788E New task

    [题意]n个数,每个数有附加属性0或1,初始全为1.m个操作,每个操作可以改变一个数字的属性为0或1.对于每次操作后的序列求有多少子序列满足要求:5个数字,中间3个数相等且属性为1,左右两个数小于等于 ...

  6. 【HDOJ】1076 An Easy Task

    水题,如题. #include <stdio.h> #define chk(Y) (Y%4==0 && Y%100!=0) || Y%400==0 int main() { ...

  7. hdu 1885 Key Task (三维bfs)

    题目 之前比赛的一个题, 当时是崔老师做的,今天我自己做了一下.... 还要注意用bfs的时候  有时候并不是最先到达的就是答案,比如HDU 3442 这道题是要求最小的消耗血量伤害,但是并不是最先到 ...

  8. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  9. 【转】单KEY业务,数据库水平切分架构实践

    本文将以“用户中心”为例,介绍“单KEY”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践: 如何来实施水平切分 水平切分后常见的问题 典型问题的优化思路及实践 一.用户 ...

随机推荐

  1. 解决mybatis使用枚举的转换

    解决mybatis使用枚举的转换 >>>>>>>>>>>>>>>>>>>>> ...

  2. Quartz Features

    Runtime Environments Quartz can run embedded within another free standing application Quartz can be ...

  3. 怎么让自己的java系统使用支付接口

    昨天花了好久的时间学习了支付接口的教,我看了前7集,就够用了,大家上网搜索一下传智播客在线支付还不错. 1.一开始有一个form表单 2.这个表单是他帮你写好的,有很多银行,银行的name都是特定的 ...

  4. C#重载重写

    overload:重载指的是同一个类中有两个或多个名字相同但是参数不同的方法,(注:返回值不能区别函数是否重载),重载没有关键字.override:过载也称重写是指子类对父类中虚函数或抽象函数的“覆盖 ...

  5. For and While loop choice.

    /* Difference between 'for' and 'while'. We can transform everything between 'for' and 'while'. if t ...

  6. IOS常用开源库

    转自:http://www.csdn.net/article/2013-06-18/2815806-GitHub-iOS-open-source-projects-two/1 1. AFNetwork ...

  7. AspNetPage 使用案例

    .首先在DBHelper创建一个方法,用于执行存储过程 public static DataTable ExecuteProc(string sql,params SqlParameter[] par ...

  8. Sqoop import加载HBase过程中,遇到Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x

    在执行hbase sqoop抽取的时候,遇到了一个错误,如下图: 在执行程序的过程中,遇到权限问题很正常,也容易让人防不胜防,有问题就想办法解决,这个是关键. 解决办法如下: 第一步:su hdfs, ...

  9. 图的遍历(bfs 和dfs)

    BFS的思想: 从一个图的某一个顶点V0出发,首先访问和V0相邻的且未被访问过的顶点V1.V2.……Vn,然后依次访问与V1.V2……Vn相邻且未被访问的顶点.如此继续,找到所要找的顶点或者遍历完整个 ...

  10. SGU 154.Factorial

    时间限制:0.25s 空间限制:4M 题意 你的任务是找到最小自然数 N, 使N!在十进制下包含 Q个零. 众所周知 N! = 1*2*...*N. 例如, 5! = 120, 120 结尾包含1个零 ...