fzu 2124
#include<stdio.h>
#include<queue>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
#define N 30
char map[N][N];
struct node {
double t;
int x,y,f;
friend bool operator<(node a,node b) {
return a.t>b.t;
}
};
double min(double a,double b) {
return a>b?b:a;
}
double max(double a,double b) {
return a>b?a:b;
}
int px,py,bx,by,n,m,visit[N][N],visits[N][N];
int dis[4][2]={1,0,-1,0,0,1,0,-1};
double ans;
int judge(int x,int y) {
if(x>=1&&x<=n&&y>=1&&y<=m&&map[x][y]!='X')
return 1;
return 0;
}
void bfs() {
int i,tstart,tend;
memset(visit,0,sizeof(visit));
memset(visits,0,sizeof(visits));//第二个数组用来记录获得加速器后的状态情况
priority_queue<node>q;
node cur,next;
cur.x=px;cur.y=py;
cur.t=0;
cur.f=0;
visit[px][py]=1;
q.push(cur);
while(!q.empty()) {//对时间用优先队列
cur=q.top();
q.pop();
if(cur.x==bx) {//
tstart=min(cur.y,by);
tend=max(cur.y,by);
for(i=tstart;i<=tend;i++)
if(map[cur.x][i]=='X')
break;
if(i==tend+1)
ans=min(ans,(tend-tstart)*0.2+cur.t);
}
if(cur.y==by) {//判断伸舌头是否能吃掉
tstart=min(cur.x,bx);
tend=max(cur.x,bx);
for(i=tstart;i<=tend;i++)
if(map[i][cur.y]=='X')
break;
if(i==tend+1)
ans=min(ans,(tend-tstart)*0.2+cur.t);
}
for(i=0;i<4;i++) {
int x=next.x=cur.x+dis[i][0];
int y=next.y=cur.y+dis[i][1];
if(judge(x,y)) {
if(cur.f==0&&visit[x][y])continue;//
if(cur.f&&visits[x][y])continue;//有一个不符合就跳过
if(x==bx&&y==by) {//出口
ans=min(ans,cur.t+0.2);
printf("%.1f\n",ans);
return ;
}
if(cur.f==1) {
next.t=cur.t+0.5;
next.f=1;
}
else {
next.t=cur.t+1;
next.f=0;
}
if(map[x][y]=='S') {
next.f=1;
map[x][y]='.';
}
if(next.f==1)
visits[x][y]=1;
else
visit[x][y]=1;
q.push(next);
}
}
}
printf("-1\n");
return ;
}
int main() {
int i,j;
while(scanf("%d%d",&n,&m)!=EOF) {
for(i=1;i<=n;i++)
scanf("%s",map[i]+1);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) {
if(map[i][j]=='P')
px=i,py=j;
if(map[i][j]=='B')
bx=i,by=j;
}
ans=999999999;
bfs();
}
return 0;
}
fzu 2124的更多相关文章
- FZU 2124 FOJ 2124 吃豆人【BFS】
Problem 2124 吃豆人 Accept: 134 Submit: 575 Time Limit: 1000 mSec Memory Limit : 32768 KB Probl ...
- FZU 2124 bfs+vis记录
第一次团队训练赛的题 自己看完题没看到不能用舌头吃道具..以为是什么贪心混合bfs..果断放弃..悄悄的背锅了 然后其实比较简单 只是利用vis记录的时候要分两种状态记录 有没有道具 每到一个地方 就 ...
- FZU 2124 吃豆人 bfs
题目链接:吃豆人 比赛的时候写的bfs,纠结要不要有vis数组设置已被访问,没有的话死循环,有的话就不一定是最优解了.[此时先到的不一定就是时间最短的.]于是换dfs,WA. 赛后写了个炒鸡聪明的df ...
- FZU 2137 奇异字符串 后缀树组+RMQ
题目连接:http://acm.fzu.edu.cn/problem.php?pid=2137 题解: 枚举x位置,向左右延伸计算答案 如何计算答案:对字符串建立SA,那么对于想双延伸的长度L,假如有 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
- ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】
FZU 2105 Digits Count Time Limit:10000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- FZU 2112 并查集、欧拉通路
原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...
- ACM: FZU 2107 Hua Rong Dao - DFS - 暴力
FZU 2107 Hua Rong Dao Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
随机推荐
- RDA 字库制作
制作韩语字库为例: 1.韩语UNICODE 范围 TV_IDF_uni_korean.txt [01fa,] [02c6,02c7] [02c9,02ca] [02cd,02cd] [02d8,02d ...
- 如何根据configure.ac和Makefile.am为开源代码产生当前平台的Makefile
1 2 3 4 5 6 7 8 9 //根据configure.in和Makefile.am生成makefile的步骤,基于UBUNTU 12.04 1.autoscan (可选) 2.aclocal ...
- 65. ExtJs获取文本框中值的几种方式
转自:https://blog.csdn.net/qiu512300471/article/details/17415675/ 1.Html文本框 如:<input type=" ...
- 湖南集训day3
难度:☆☆☆☆☆☆☆ 此时相望不相闻,愿逐月华流照君 /* 23 233 223 啦啦啦德玛西亚 */ #include<iostream> #include<cstdio> ...
- [App Store Connect帮助]三、管理 App 和版本(2.2)输入 App 信息:设置 App 分级
您必须设置 App 分级,这是一项平台版本信息属性,用于在 App Store 上实施家长控制.App Store Connect 提供了一份内容描述列表,通过该列表,您可以确定相应内容在您 App ...
- Vue 页面回退参数被当作字符串处理
当时情景是这样的,我从A页面跳到B页面时会传一个Boolean类型的参数,当B跳到C,再从C返回B的时候,控制台打印发现参数还在,可是判断怎么都不起作用,后来发现,当页面返回的时候,默认将参数变成了字 ...
- 使用yum命令更新时锁住了怎么办?
出现的状况如下: [root@iZwz951sp834mvbed8gdzzZ ~]# yum update kernelLoaded plugins: fastestmirrorExisting lo ...
- Hadoop基础(二)
HDFS 读写流程 我们知道在HDFS中我们的文件按数据块进行存储,那么当我们写入或者读取一个文件的时候HDFS到底进行了哪些操作呢? HDFS 写流程 如上图所示,假如我们有一个四个节点的集群,并且 ...
- [Codeforces]Codeforces Round #490 (Div. 3)
Mishka and Contest #pragma comment(linker, "/STACK:102400000,102400000") #ifndef ONLINE_JU ...
- [转帖]c++ 面试整理
1. 继承方式 public 父类的访问级别不变 protected 父类的public成员在派生类编程protected,其余的不变 private 父类的所有成员变成pr ...