codevs2059逃出克隆岛(传送门bfs)
/*
和普通的迷宫问题类似只是多了一个叫传送门的东西
对于传送门的处理:
每当跑到传送门就把其余所有传送门周围的点都入队
传送门之间不花费时间并且从不是传送门的点走到传送门
也不花费时间花费时间的(好像说了句废话.) 所以判断一下
*/
#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)的更多相关文章
- AC日记——逃出克隆岛 (bfs)
2059 逃出克隆岛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都 ...
- 逃出克隆岛 (codevs 2059)
较普通的走迷宫的题 传送门 :codevs 2059 逃出克隆岛 思路 :BFS 即可 PS :传送门 不必重复使用 #include <iostream> #include < ...
- codevs 2059 逃出克隆岛
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图. 今天,他 ...
- 西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)
题意:有来两个人A和B,A追B,A和B每次向上下左右移动一个单位,一共有两扇门,问A是否可以追上B(在门口追上也算合法). 题解:当时看题意说在门口也算?就觉得是判断两个人到门口的时间,对他们两个人分 ...
- 使用 trash-cli 逃出 rm 命令误删除重要文件的阴影
今天是一个难忘的日子,当时本来想清除我们公司网站cms目录下面一些cdn推送网页后残留的垃圾文件,结果在执行rm -rf conten* 时打成了rm -rf conten *结果就悲剧了.cms目录 ...
- hdoj1072 Nightmare(bfs)
题目大意: 在迷宫中有一个炸弹,过六个单位时间就会爆炸,要你求一个起点到迷宫的终点的最短距离,迷宫中有时间重置器,当你走到这个格子,炸弹的爆炸时间重新置为0,迷宫中标识为墙壁的格子不能走,到达任意一个 ...
- hdu 1253 3维迷宫 在规定时间内能否出迷宫 (3维BFS)
题意:有一个人要在魔王回来之前逃出城堡.1表示墙,0表示路.魔王将在T分钟后回到城堡 起点可以是墙,但是人能走出.而终点也可以是墙,那自然就走不出了,但是要判断. 剪枝:如果终点是门或者从起点到终点的 ...
- Bfs+最短路【p3393】 逃离僵尸岛
Description 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有\(N\)个城市,城市之间有道路相连.一共有\(M\)条双向道路.保证没有自环和重边. \(K\ ...
- 【图论-最短路】【P3393】逃离僵尸岛
传送门 Description 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵 ...
随机推荐
- newman安装时遇到问题的解决
npm安装newman时系统提示需要安装.net framwork环境 通过查询文档安装visual studio express: 于是安装visual studio 2012 express. 安 ...
- ubuntu各版本的区别
ubuntu.kubuntu以及xubuntu的区别Ubuntu默认是Gnome:KUbuntu用的是KDE,效果比较炫目,但是系统要求也较高XUbuntu用的是Xface,比较轻量,系统要求较低,推 ...
- 转:LESS CSS 框架简介
原文来自于:http://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/ 简介 CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTM ...
- 转:Ubuntu12.04 LTS 使用心得-开机挂载其他分区
1.在/media目录下创建好用来关联你要挂载的分区的文件夹(相当于一个虚拟目录/挂载点,链接/映射到你要挂载的盘符去) 我要挂载4个分区,所以创建了四个挂载点,名字随便取,只要你自己认的出来哪个对应 ...
- BZOJ 1263 整数划分
Description 从文件中读入一个正整数\(n\).要求将\(n\)写成若干个正整数之和,并且使这些正整数的乘积最大. 例如,\(n=13\),则当\(n\)表示为\(4+3+3+3\)(或\( ...
- codeforces C. Booking System
题意:有n组客人,分别告诉每一组的个数和花费,然后给你餐厅内k个桌子,每个桌子的最大容纳人数,如何安排使得餐厅最大收益并且容纳人数尽可能大: 思路:贪心,对花费排序,然后对每一组客人找桌子就可以. # ...
- CodeForce 7 B - Memory Manager(模拟)
题目大意:给你一段内存,要你进行如下的三个操作. 1.分配内存 alloc X ,分配连续一段长度为X的内存. 如果内存不够应该输出NULL,如果内存够就给这段内存标记一个编号. 2.擦除编号为 ...
- 【转】设置SecureCRT会话的缓冲区大小
原文网址:http://guanjianfeng.com/archives/1484 在使用SecureCRT操作设备时,默认的回滚行数为500行.可以通过打开[选项]->[会话选项]-> ...
- 在Win7下用XManager远程控制ubuntu
在Win7下用XManager远程控制ubuntu 远程主机通过xdmcp协议连接到ubuntu的图形终端,以图形终端方式登录. 远程主机是win7.ubuntu装在VMware虚拟机上,ubun ...
- 数据结构(动态树):UOJ 207 共价大爷游长沙
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHwAAAJZCAIAAABUW7XHAAAgAElEQVR4nOy93cstx5Xm2f9TXh2EOe