试题描述
在n行n列的字符方阵中I表示“我”最初所在位置,R是大兵瑞恩所在位置。4<n<11。
“我”从当前位置可以向上、或下、或左、或右移动一格,只要新点无障碍且未出界。
标有“.”的位置可以通过,标有“*”的位置是障碍物,不能到达和通过。
标有字母A~G的位置代表“门”,是有条件的障碍物,1~7依次是A~G的钥匙。
走到某个门时,若已走路径未经过其钥匙,则门视为“*”,若已经过其钥匙则视为“.”。
求“我”到达瑞恩的位置至少要走多少步?若无法到达输出-1。
输入
输入文件SAVE.IN中共n行n列字符,均为题目所述的字符。字符间无空格。
输出
输出文件SAVE.OUT中仅有答案一个整数。
输入示例
6
......
......
.I.3..
.**2*.
.**1*C
.A*R*B
输出示例
27

设状态为(x,y,S)表示当前在(x,y),拥有的钥匙集合为S,BFS即可。

#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
struct Arr {int x,y,S;};
char A[][];
int n,vis[][][<<],d[][][<<];
const int mx[]={,-,,},my[]={,,,-};
queue<Arr> Q;
void bfs(int x,int y,int S) {
vis[x][y][S]=;Q.push((Arr){x,y,S});
while(!Q.empty()) {
x=Q.front().x;y=Q.front().y;S=Q.front().S;Q.pop();
rep(dir,,) {
int x2=x+mx[dir],y2=y+my[dir],S2=S;
if(x2<||x2>n||y2<||y2>n) continue;
if(A[x2][y2]=='*') continue;
if(isdigit(A[x2][y2])&&!(S&(<<(A[x2][y2]-'')))) continue;
if(isalpha(A[x2][y2])) S2|=(<<(A[x2][y2]-'A'));
if(!vis[x2][y2][S2]) {
vis[x2][y2][S2]=;
d[x2][y2][S2]=d[x][y][S]+;
Q.push((Arr){x2,y2,S2});
}
}
}
}
int main() {
int x1,x2,y1,y2;
n=read();
rep(i,,n) scanf("%s",A[i]+);
rep(i,,n) rep(j,,n) {
if(A[i][j]=='I') x1=i,y1=j,A[i][j]='.';
if(A[i][j]=='R') x2=i,y2=j,A[i][j]='.';
}
bfs(x1,y1,);
int ans=1e9;
rep(S,,<<) if(vis[x2][y2][S]) ans=min(ans,d[x2][y2][S]);
if(ans!=1e9) printf("%d\n",ans);
else puts("-1");
return ;
}

COJ 拯救瑞恩的更多相关文章

  1. 2019西安多校联训 Day2

    试题链接:http://www.accoders.com/contest.php?cid=1894   考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...

  2. 拯救无法启动的虚拟机文件.vmdk中的数据

    FROM: http://blog.csdn.net/npy_lp/article/details/7686583 从事Linux开发的软件工程师几乎都使用过虚拟机软件,如VMware worksta ...

  3. 【STL】优先队列priority_queue详解+OpenJudge-4980拯救行动

    一.关于优先队列 队列(queue)这种东西广大OIer应该都不陌生,或者说,队列都不会你还学个卵啊(╯‵□′)╯︵┻━┻咳咳,通俗讲,队列是一种只允许从前端(队头)删除元素.从后端(队尾)插入元素的 ...

  4. 一次U盘拯救的经历

    U盘拷资料,突然就弹出框框,复制终止了,然后U盘里面的只是编程可读的了. 倒是没有啥重要的资料,就是只有这一个U盘了,平时传资料都靠它,不能就这么垮了啊,于是就来了一次拯救行动. 一共有三个步骤 第一 ...

  5. OpenJudge4980:拯救行动//stl优先队列

    总时间限制:  10000ms 内存限制:  65536kB 描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用N*M (N, M <= 200)的矩阵来表示.矩阵中的每项可以代表道路(@). ...

  6. 【BZOJ-3174】拯救小矮人 贪心 + DP

    3174: [Tjoi2013]拯救小矮人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 686  Solved: 357[Submit][Status ...

  7. SQLSERVER拯救某个时间点被误删除的数据

    SQLSERVER拯救某个时间点被误删除的数据 转载自:http://blog.csdn.net/dba_huangzj/article/details/8491327 要拯救某个时间点被误删除的数据 ...

  8. 我发现:在StackOverflow上拯救歪果仁十分有意思!

    菊长:火星特工们!今天是周五了,大家有什么提议? BeJavaGod:报告菊长!我发现,在StackOverflow上拯救歪果仁十分有意思! 噗哈哈,时不时遇到问题会使用到StackOverflow, ...

  9. 拿什么来拯救你,我的table

    分类: Html/CSS | 转载请注明: 出自 海玉的博客 本文地址: http://www.hicss.net/how-to-save-you-my-table/ table曾经在网页开发中占据着 ...

随机推荐

  1. WCDMA是什么意思?CDMA是什么意思?GSM是什么意思

    有些朋友在购买3G智能手机的时候会遇到这样的困惑,为什么相同的手机会有不同手机网络制式之分呢?有的支持WCDMA/GSM,有的支持CDMA/GSM,到底自己应该选购哪一种手机好呢?WCDMA是什么意思 ...

  2. XPath学习:轴(3)——descendant

    XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointe ...

  3. 在VMware的虚拟机平台上如何进行网络设置

    1.本文构建的是这样一个网络,有两台winXP系统的PC,处于同一局域网内,PC里 都装有VMware虚拟机,虚拟机上跑的是Redhat Linux 9,我们想要在winXP系统下访问本机的虚拟机li ...

  4. Django对静态文件的处理——部署阶段

    参考:http://blog.makto.me/post/2012-11-09/static-files-in-django-deployment HTML模板中的用法: {% load static ...

  5. python chm 中文帮助 (2.7 和 3.4)

    sphinx-build 生成的(htmlhelp) 存在2个问题 1.生成的html 编码 cp2152,需要修改/sphinx/builders/html.py ctx['encoding'] = ...

  6. glGetFloatv (GL_MODELVIEW_MATRIX, mat)

    这个函数的作用是取出GL_MODELVIEW_MATRIX,然后存储在mat这个矩阵中,用于逆变换等.

  7. java用代理访问

    Properties prop = System.getProperties(); prop.setProperty("http.proxyHost", "localho ...

  8. IOS项目自动构建

    # Sets the target folders and the final framework product. # 如果工程名称和Framework的Target名称不一样的话,要自定义FMKN ...

  9. Java Hour 13 集合基础

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为13 Hour,请各位不吝赐教. Java 中的集 ...

  10. html5 (个人笔记)

    妙味 html5  1.0 <!DOCTYPE html> <html> <head lang="en"> <meta charset=& ...