TOJ 2939 解救小Q
描述
小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她。迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到传送阵的另一头。
现在请你帮助love8909算一算,他至少需要走多少步才能解救到小Q? (上下左右四个方向走,传送门可以多次使用)
输入
第一行为一个整数T,表示测试数据组数。每组测试数据第一行为两个整数N,M,(1 <= N, M <= 50)表示迷宫的长和宽。接下来有N行,每行M个字符,是迷宫的具体描述。
'.'表示安全的位置,'#'表示陷阱,
'Q'表示小Q的位置,'L'表示love8909所在位置,
数据保证love8909只有一个,数据也保证小Q只有一个。小写字母'a'-'z'表示分别表示不同的传送阵,数据保证传送阵两两配对。
输出
每组数据输出一行,解救小Q所需的最少步数,如果无论如何都无法救小Q,输出-1。
样例输入
2
5 5
....L
.###.
b#b#a
##.##
...Qa
5 5
....L
.###.
.#.#.
##.##
...Q.
样例输出
3
-1
题目来源
cjx在做这题的时候真心难受(╯﹏╰),超时!后来发现每次标记后的点并不完全是经过的点,而是传送时候的点。泪奔!
修改后出现了WA,cjx有种苦尽甘来的感觉。事实是这样,很快就想到有一种特殊的情况没有考虑到。此案例通过后终于AC了。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <queue>
#define MAXN 55
using namespace std; int T,M,N;
int csMap[27][5];
char m[MAXN][MAXN];
int flag[MAXN][MAXN];
int ans,bx,by,ex,ey;
int dir[4][2]={
{0,1},{0,-1},{1,0},{-1,0}
}; struct Node{
int x;
int y;
int step;
friend bool operator <(Node a, Node b){
return a.step>b.step;
}
}; //存储传送点
void save(char a, int x, int y){
int pos=a-'a';
if(csMap[pos][0]==0){
csMap[pos][1]=x;
csMap[pos][2]=y;
csMap[pos][0]=1;
}else if(csMap[pos][0]==1){
csMap[pos][3]=x;
csMap[pos][4]=y;
}
} int bfs(){
priority_queue<Node> Q;
Node n1;
n1.x=bx;
n1.y=by;
n1.step=0;
flag[bx][by]=1;
Q.push(n1);
while(!Q.empty()){
Node now=Q.top();
Q.pop();
if( now.x==ex && now.y == ey )return now.step;
for(int i=0; i<4; i++){
Node t;
t.x=now.x+dir[i][0];
t.y=now.y+dir[i][1];
t.step=now.step+1;
if( 1<=t.x&&t.x<=N && 1<=t.y&&t.y<=M &&!flag[t.x][t.y] && m[t.x][t.y]!='#'){
flag[t.x][t.y]=1;
if('a'<=m[t.x][t.y] && m[t.x][t.y]<='z'){
int pos=m[t.x][t.y]-'a';
if(csMap[pos][1]==t.x && csMap[pos][2]==t.y){
t.x=csMap[pos][3];
t.y=csMap[pos][4];
}else{
t.x=csMap[pos][1];
t.y=csMap[pos][2];
}
}
Q.push(t);
}
}
}
return -1;
} int main()
{
scanf("%d",&T);
while(T--){
scanf("%d %d",&N,&M);
for(int i=0; i<27; i++){
//0表示没有放任何的传送点
csMap[i][0]=0;
}
for(int i=1; i<=N; i++){
getchar();
for(int j=1; j<=M; j++){
scanf("%c",&m[i][j]);
if( 'a'<=m[i][j] && m[i][j]<='z' ){
save(m[i][j],i,j);
}
if( m[i][j]=='L'){
bx=i;
by=j;
}
if( m[i][j]=='Q'){
ex=i;
ey=j;
}
flag[i][j]=0;
}
}
ans=bfs();
printf("%d\n",ans);
}
return 0;
}
TOJ 2939 解救小Q的更多相关文章
- CDOJ_149 解救小Q
原题网址:http://acm.uestc.edu.cn/#/problem/show/149 小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她. 迷宫里面有一些陷阱,一旦走到陷阱里,就会 ...
- UESTC149 解救小Q
小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她.迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到传送阵的另一头.现在请你 ...
- bzoj3007 解救小云公主
3007: 解救小云公主 Time Limit: 5 Sec Memory Limit: 512 MB Submit: 159 Solved: 71 [id=3007" style=&q ...
- 平面直接坐标系线段相交问题(小Q(钟神)的问题)
[问题描述] 小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在?轴正半轴和?轴正半轴分别挑选?个点.随后,他将 ...
- 剑指Offer——网易笔试之解救小易
知识要点 首先介绍一下曼哈顿,曼哈顿是一个极为繁华的街区,高楼林立,街道纵横,从A地点到达B地点没有直线路径,必须绕道,而且至少要经C地点,走AC和 CB才能到达,由于街道很规则,ACB就像一个直角3 ...
- hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)T ...
- HD4505小Q系列故事——电梯里的爱情
Problem Description 细心的同事发现,小Q最近喜欢乘电梯上上下下,究其原因,也许只有小Q自己知道:在电梯里经常可以遇到他心中的女神HR. 电梯其实是个很暧昧的地方,只有在电梯里,小Q ...
- hdu4505小Q系列故事——电梯里的爱情
小Q系列故事——电梯里的爱情 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- HDU-4515 小Q系列故事——世界上最遥远的距离
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
随机推荐
- XE下 SVG格式的图标使用方法
下载一个SVG格式的图标,千图网,http://tool.58pic.com/tubiaobao/ 用txt文本打开SVG图标 拖一个PathLabel控件 在PathLabel控件的Data属性添加 ...
- ASP.NET jquery-1.9.1 语句
<script src="Script/jquery-1.9.1.js"></script> <script language="javas ...
- Visual Studio 2015 开发 ASP.NET 5
在以往微软发布或更新 Visual Studio 版本时,我们开发 ASP.NET 应用程序,带给我们的变化其实并不是很大,或者说你根本就感受不到变化,你感受到的只是下载安装了几个 G 的 Updat ...
- SpringMVC+Hibernate 项目开发之三 (创建SpringMVC项目)
引用(很全面了):http://blog.csdn.net/dhx20022889/article/details/38041039 我只想说默认创建的项目使用的Spring版本可能不是你想要的,可以 ...
- p2p_server
以太坊系列之十九 对p2p模块server的理解 type transport interface { // The two handshakes. doEncHandshake(prv *ecdsa ...
- MVC ASP.NET MVC各个版本的区别
ASP.NET MVC各个版本的区别 Net Framework4.5是不支持安装在window server 2003上,如非装请用net framework4.0; MVC1.0 publsh t ...
- 有大佬拉我一把麽,现在广州还有c++后台实习招聘麽
有大佬拉我一把麽,现在广州还有c++后台实习招聘麽
- requests利用selenium,代理Ip,云打码,验证码抠图操作 爬取搜狗微信公众号内容
爬取思路,爬取搜狗微信公众号内容,爬取第一层url时请求太快出现验证码,我这里用的蘑菇云代理,并在程序中我判断什么情况下是否+代理,做到合理运用代理ip.爬取第二层url时验证码出现次数更严重(和第一 ...
- loj #6226. 「网络流 24 题」骑士共存问题
#6226. 「网络流 24 题」骑士共存问题 题目描述 在一个 n×n\text{n} \times \text{n}n×n 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上 ...
- MyBatis配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...