UESTC 解救小Q
来源:互联网 发布:技术导航源码 编辑:程序博客网 时间:2024/04/29 20:22
小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她。 迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫 里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到 传送阵的另一头。
现在请你帮助love8909算一算,他至少需要走多少步才能解 救到小Q?
Input
第一行为一个整数
每组测试数据第一行为两个整数
接下来有
.
表示安全的位置#
表示陷阱,Q
表示小Q的位置L
表示love8909所在位置,
数据保证love8909只有一个,数据也保证小Q只有一个。
小写字母a
-z
表示分别表示不同的传送阵,数据保证传送阵 两两配对。
Output
每组数据输出一行,解救小Q所需的最少步数,如果无论如何都 无法救小Q,输出-1
。
Sample input and output
25 5....L.###.b#b#a##.##...Qa5 5....L.###..#.#.##.##...Q.
3-1注意一点:传送带走过后还可以走回来
15 5...#L.#.#a.#a#Q.###......
答案应为4
没有优化的代码
#include<stdio.h>#include<iostream>#include <queue>#include <string.h>using namespace std;int n,m;char map[60][60];int s_i,s_y,e_i,e_y;struct node{ int x,y; int time; node(int i,int j,int w):x(i),y(j),time(w) {} bool operator<(const node &t)const { return time>t.time; }};int dir[4][2]={{1,0},{0,-1},{0,1},{-1,0}}; //下,左 右,上bool vis[60][60];bool judge(int x,int y){ if(!vis[x][y] && x>=0 && x<n && y>=0 && y<m && map[x][y]!='#') { return true; } return false;}bool judeg2(int x,int y,int i ,int j) //判断坐标(x,y)(i,j)是否一致{ if(x==i && y==j) { return false; } return true;}int bfs(){ priority_queue<node>q; node h(s_i,s_y,0); q.push(h); vis[s_i][s_y]=true; while (!q.empty()) { h=q.top(); q.pop(); if(h.x==e_i && h.y==e_y) { return h.time; } for (int i=0; i<4; i++) { if(judge(h.x+dir[i][0], h.y+dir[i][1])) { node t(h.x+dir[i][0],h.y+dir[i][1],h.time+1); if(map[t.x][t.y]>='a' && map[t.x][t.y]<='z') { bool flag=false; for (int j=0; j<n; j++) //遍历找传送出口 这种情况不能标记 { for (int k=0; k<m; k++) { if(judeg2(j,k,t.x,t.y) && map[j][k]==map[t.x][t.y]) { t.x=j; t.y=k; flag=true; break; } } if (flag) { break; } } } else { vis[t.x][t.y]=true; } q.push(t); } } } return -1;}int main(){ int t; scanf("%d",&t); while (t--) { scanf("%d%d",&n,&m); memset(vis, false, sizeof(vis)); for (int i=0; i<n; i++) { scanf("%s",map[i]); } for (int i=0; i<n; i++) { for(int j=0;j<m;j++) { if(map[i][j]=='L') { s_i=i; s_y=j; } if(map[i][j]=='Q') { e_i=i; e_y=j; } } } printf("%d\n",bfs()); } return 0;}
0 0
- UESTC 解救小Q
- 解救小Q UESTC
- Uestc-1002-解救小Q
- UESTC - 149 解救小Q
- uestc oj 1002 解救小Q
- UESTC 149——解救小Q
- UESTC 149 -- 解救小Q (bfs)
- 解救小Q(bfs)
- 解救小Q(BFS)
- CDOJ_149 解救小Q
- CDOJ 解救小Q
- 解救小Q
- 解救小Q
- 2014 UESTC Training for Search Algorithm Problem A 解救小Q
- CDOJ(UESTC) 149 解救小Q(bfs中涉及传送带的问题)
- CDOJ 1002 解救小Q
- TZC 2939解救小Q
- CDOJ 1002 解救小Q
- 将h.264视频流封装成flv格式文件(二.开始动手)
- Linux内核-进程调度
- Android 自定义 ViewPager 打造千变万化的图片切换效果
- Android应用通过按钮退出
- 健康——基本运动的卡路里计算公式
- UESTC 解救小Q
- docker创建私有仓库及存储image
- 汽车百科系列之(十四): 汽车打蜡讲究多
- 绕开final(不可继承)的限制,扩展Integer判断素数的方法
- 图片文字转换成word文字要怎么办
- ORA-12518: TNS:listener could not hand off client connection
- Mac下MySql的启动、停止
- 第二篇:Hibernate环境搭建及jar包
- 串口传输工具sz和rz的安装与使用