/*
和普通的迷宫问题类似只是多了一个叫传送门的东西
对于传送门的处理:
每当跑到传送门就把其余所有传送门周围的点都入队
传送门之间不花费时间并且从不是传送门的点走到传送门
也不花费时间花费时间的(好像说了句废话.) 所以判断一下
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<algorithm>
#define maxn 5010
using namespace std;
int n,m,v,f[maxn][maxn],num;
char s[maxn][maxn];
int xx[]={,,,,-};
int yy[]={,,-,,};
int sx,sy,ex,ey;
struct node
{
int xi,yi;
int V;
};
struct Node
{
int xi,yi;
}door[];
queue<node>q;
int main()
{
scanf("%d%d%d",&n,&m,&v);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
cin>>s[i][j];
if(s[i][j]=='Y')
{
sx=i;sy=j;
s[i][j]='*';
}
if(s[i][j]=='C')
{
ex=i;ey=j;
s[i][j]='*';
}
if(s[i][j]=='P')
{
num++;
door[num].xi=i;
door[num].yi=j;
}
}
node tmp;
tmp.xi=sx;
tmp.yi=sy;
tmp.V=;
q.push(tmp);
f[sx][sy]=;
while(!q.empty())
{
node now=q.front();
q.pop();
int nx=now.xi;
int ny=now.yi;
if(s[nx][ny]=='*')//普通的点 只要周围的点入队
for(int i=;i<=;i++)
{
int ox=nx+xx[i];
int oy=ny+yy[i];
if(ox>&&ox<=n&&oy>&&oy<=m&&f[ox][oy]==&&s[ox][oy]!='#')
{
f[ox][oy]=;
node tmep;
tmep.xi=ox;
tmep.yi=oy;
if(s[ox][oy]=='*')tmep.V=now.V+v;
else tmep.V=now.V;//判断是不是要+time
q.push(tmep);
if(ox==ex&&oy==ey)
{
printf("%d",now.V);
return ;
}
}
}
if(s[nx][ny]=='P')//传送门单独处理
for(int i=;i<=num;i++)//所有的传送门 当然也包括他自己
{
int nx=door[i].xi;
int ny=door[i].yi;
for(int j=;j<=;j++)
{
int ox=nx+xx[j];
int oy=ny+yy[j];
if(ox>&&ox<=n&&oy>&&oy<=m&&f[ox][oy]==&&s[ox][oy]!='#')
{
f[ox][oy]=;
node tmep;
tmep.xi=ox;
tmep.yi=oy;
if(s[ox][oy]=='*')tmep.V=now.V+v;
else tmep.V=now.V;
q.push(tmep);
if(ox==ex&&oy==ey)
{
printf("%d",now.V);
return ;
}
}
}
}
}
printf("screw you!");
return ;
}

codevs2059逃出克隆岛(传送门bfs)的更多相关文章

  1. AC日记——逃出克隆岛 (bfs)

    2059 逃出克隆岛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都 ...

  2. 逃出克隆岛 (codevs 2059)

    较普通的走迷宫的题 传送门 :codevs 2059 逃出克隆岛 思路 :BFS 即可    PS :传送门 不必重复使用 #include <iostream> #include < ...

  3. codevs 2059 逃出克隆岛

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图. 今天,他 ...

  4. 西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)

    题意:有来两个人A和B,A追B,A和B每次向上下左右移动一个单位,一共有两扇门,问A是否可以追上B(在门口追上也算合法). 题解:当时看题意说在门口也算?就觉得是判断两个人到门口的时间,对他们两个人分 ...

  5. 使用 trash-cli 逃出 rm 命令误删除重要文件的阴影

    今天是一个难忘的日子,当时本来想清除我们公司网站cms目录下面一些cdn推送网页后残留的垃圾文件,结果在执行rm -rf conten* 时打成了rm -rf conten *结果就悲剧了.cms目录 ...

  6. hdoj1072 Nightmare(bfs)

    题目大意: 在迷宫中有一个炸弹,过六个单位时间就会爆炸,要你求一个起点到迷宫的终点的最短距离,迷宫中有时间重置器,当你走到这个格子,炸弹的爆炸时间重新置为0,迷宫中标识为墙壁的格子不能走,到达任意一个 ...

  7. hdu 1253 3维迷宫 在规定时间内能否出迷宫 (3维BFS)

    题意:有一个人要在魔王回来之前逃出城堡.1表示墙,0表示路.魔王将在T分钟后回到城堡 起点可以是墙,但是人能走出.而终点也可以是墙,那自然就走不出了,但是要判断. 剪枝:如果终点是门或者从起点到终点的 ...

  8. Bfs+最短路【p3393】 逃离僵尸岛

    Description 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有\(N\)个城市,城市之间有道路相连.一共有\(M\)条双向道路.保证没有自环和重边. \(K\ ...

  9. 【图论-最短路】【P3393】逃离僵尸岛

    传送门 Description 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵 ...

随机推荐

  1. uboot的jumptable_init函数分析

    一.函数说明 函数功能:安装系统函数指针 函数位置:common/exports.c 二.函数分析 void jumptable_init (void) { int i; gd->jt = (v ...

  2. ps的使用方法

    1.打开原图素材,Ctrl + J把背景图层复制一层,按Ctrl + Shift + U去色,执行:滤镜 > 模糊 > 高斯模糊,数值4,图层混合模式为滤色,图层不透明度改为27%. 2. ...

  3. 【转】nodejs

    Node.JS + MongoDB技术讲座            云计算 + 大数据 = 未来. 在中国的云计算上基本上是一个概念,个人感觉与当初的SOA没有太大的区别,空泛的理论. 中小型开发的未来 ...

  4. js 返回前一页并刷新页面方法

    [导读] 要返回上一页再刷新页面我们用到最多的是在像php,asp,jsp,asp.net中,下面我来给大家先介绍js 返回前一页并刷新页面,然后再把这些代码放在php中实现删除后返回当前页面并刷新页 ...

  5. cf B Three matrices

    #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ][] ...

  6. 构造函数语义学之Copy Constructor构建操作(1)

    一.Copy Constructor的构建操作 就像 default constructor 一样,如果class没有申明一个 copy constructor,就会隐含的声明或隐含的定义一个.生成的 ...

  7. 【转】Android与JNI(二) -- 不错

    原文网址:http://www.cnblogs.com/eddy-he/archive/2012/08/09/2629974.html 软件版本: ubuntu10.04 java version & ...

  8. 【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5491 题目大意: 一个数D(0<=D<231),求比D大的第一个满足:二进制下1个个数在 ...

  9. 【单调栈】Vijos P1926 紫色的手链

    题目链接: https://vijos.org/p/1926 题目大意: 给n个数(n<=100 000),求任意区间的最大值异或次大值的最大值. 题目思路: [模拟][单调栈] 我们维护一个严 ...

  10. [Hibernate] List 映射例子

    List 是 java 集合的一个工具,存储线性的数据,允许重复数据.开发者可以准确控制在 list 那个位置插入数据.本例子演示 Java 的 List 集合和 MySQL 数据库的映射应用. 使用 ...