AC日记——逃出克隆岛 (bfs)
oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图。
今天,他找到一张名为《逃出克隆岛》的地图,在这张地图中,有一个n行m列的矩阵,矩阵由’Y’,’C’,’#’,’*’,’P’,5种元素组成。’Y’表示yh的出生位置,C表示克隆岛的出口,’#’表示该处不可通过,’*’表示通过该处需要消耗金币cost,’P’表示传送阵,任意两个传送阵之间可以免费互相传送。由于这仅仅是第一关,yh不想浪费太多的体力,聪明的你能帮他算出从’Y’出发到’C’最少需要消耗多少金币吗?当然,如果yh永远无法到达’C’,请输出” screw you!”以表到yh的不满。
第一行两个整数,n,m,表示矩阵有n行m列
接下来为n行m列的矩阵,由’Y’,’C’,’#’,’*’,’P’,组成,含义如题目描述。
输出1行,表示yh需要花费的最小体力(如果无法到达输出”screw you!”)。
【样例输入1】
1 3 3
Y*C
【样例输入2】
1 3 2
Y#C
【样例输入3】
1 5 2
YP#PC
【样例输出1】
3
【样例输出2】
screw you!
【样例输出3】
0
【数据范围】
对于100%的数据,n*m≤5000,传送阵’P’的数量≤500
思路:
暴力bfs强行ac
来,上代码:
#include<queue>
#include<cstdio>
#include<cstring>
#include<cstdlib> using namespace std; struct node {
int x,y,dis;
};
struct node cur_1,cur_2,cur_3; const int dx[]={,-,,,};
const int dy[]={,,,,-}; int n,m,p,num_P=,px[],py[],ex,ey,sx,sy;
int pd[][]; char map[][]; queue<struct node>que; void bfs()
{
memset(pd,/,sizeof(pd));
cur_1.x=sx,cur_1.y=sy,cur_1.dis=;
que.push(cur_1);
pd[sx][sy]=;
while(!que.empty())
{
cur_1=que.front();
que.pop();
for(int i=;i<=;i++)
{
if(cur_1.x+dx[i]>&&cur_1.x+dx[i]<=n&&cur_1.y+dy[i]>&&cur_1.y+dy[i]<=m)
{
if(map[cur_1.x+dx[i]][cur_1.y+dy[i]]=='#') continue;
if(pd[cur_1.x+dx[i]][cur_1.y+dy[i]]<=cur_1.dis) continue;
pd[cur_1.x+dx[i]][cur_1.y+dy[i]]=cur_1.dis;
cur_2.x=cur_1.x+dx[i],cur_2.y=cur_1.y+dy[i],cur_2.dis=cur_1.dis;
if(map[cur_1.x+dx[i]][cur_1.y+dy[i]]=='*')
{
cur_2.dis+=p;
que.push(cur_2);
}
if(map[cur_2.x][cur_2.y]=='P')
{
que.push(cur_2);
for(int j=;j<=num_P;j++)
{
if(pd[px[j]][py[j]]<=cur_2.dis) continue;
pd[px[j]][py[j]]=cur_2.dis;
cur_3.x=px[j],cur_3.y=py[j],cur_3.dis=cur_2.dis;
que.push(cur_3);
}
}
if(map[cur_2.x][cur_2.y]=='Y'||map[cur_2.x][cur_2.y]=='C') que.push(cur_2);
}
}
}
} int main()
{
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=n;i++)
{
scanf("%s",map[i]+);
for(int j=;j<=m;j++)
{
if(map[i][j]=='P') px[++num_P]=i,py[num_P]=j;
if(map[i][j]=='C') ex=i,ey=j;
if(map[i][j]=='Y') sx=i,sy=j;
}
}
bfs();
if(pd[ex][ey]>) printf("screw you!\n");
else printf("%d\n",pd[ex][ey]);
return ;
}
AC日记——逃出克隆岛 (bfs)的更多相关文章
- 逃出克隆岛 (codevs 2059)
较普通的走迷宫的题 传送门 :codevs 2059 逃出克隆岛 思路 :BFS 即可 PS :传送门 不必重复使用 #include <iostream> #include < ...
- codevs 2059 逃出克隆岛
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图. 今天,他 ...
- codevs2059逃出克隆岛(传送门bfs)
/* 和普通的迷宫问题类似只是多了一个叫传送门的东西 对于传送门的处理: 每当跑到传送门就把其余所有传送门周围的点都入队 传送门之间不花费时间并且从不是传送门的点走到传送门 也不花费时间花费时间的(好 ...
- AC日记——codevs1688求逆序对
AC日记--codevs1688求逆序对 锵炬 掭约芴巷 枷锤霍蚣 蟠道初盛 到被他尽情地踩在脚下蹂躏心中就无比的兴奋他是怎么都 ㄥ|囿楣 定要将他剁成肉泥.挫骨扬灰跟随着戴爷这么多年刁梅生 圃鳋 ...
- AC日记——仙岛求药 openjude 2727
仙岛求药 思路: bfs: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> #inc ...
- AC日记——逃离僵尸岛 洛谷 P3393
逃离僵尸岛 思路: spfa: 代码: #include <cstdio> #include <cstring> #include <iostream> #incl ...
- 西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)
题意:有来两个人A和B,A追B,A和B每次向上下左右移动一个单位,一共有两扇门,问A是否可以追上B(在门口追上也算合法). 题解:当时看题意说在门口也算?就觉得是判断两个人到门口的时间,对他们两个人分 ...
- AC日记——最小的N个和 codevs 1245
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
- AC日记——寻找道路 洛谷 P2296
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
随机推荐
- 功放AUX接口解析
功放上的AUX输入端口就是音频输入端口,用来连接音频输出设备:PC机上声卡.MP3播放器.CD机等
- mysql并发insert deadlock分析以及解决,无delete/update/for update
关于并发insert操作发生deadlock这个情况,一直有很多争议,而且网上的帖子所有的例证和模拟其实不一定反映了真实的情况,例如:https://www.percona.com/blog/2012 ...
- LALR(1)语法分析生成器--xbytes
0.概述: 看了编译器龙书和虎书后,自己手动写了一个LALR(1)语法分析生成器,使用的语法文件格式和lemon的差不多. 程序里面很多的算法也都是摘录自虎书,龙书虽然讲的很详细,但是真正动手写的时候 ...
- nodeJS中npm常见的命令
常用的nodeJS中npm的命令:npm主要是node包管理和发布的工具.npm常用的命令:1:npm install <name> //(下载包) 下载后的包放在当前路径下面 npm i ...
- How-to: disable the web-security-check in Chrome for Mac
When I try to test one web app in coperate intranet, there is always some error like "Failed to ...
- iOS之UI--主流框架的搭建--仿制QQ的UI框架
使用XCode搭建多个控制器界面,一般在实际开发中建议超过四个控制器界面使用纯代码. 下面的实例其实已经超过了四个,总结详细步骤的目的,主要是更熟悉XCode的StoryBoard使用细节. 先直接上 ...
- openswitch db files
http://openvswitch.org/support/dist-docs/ovsdb-tool.1.html FILES The default db is /etc/openvswitch/ ...
- Effective Java 18 Prefer interfaces to abstract classes
Feature Interface Abstract class Defining a type that permits multiple implementations Y Y Permitted ...
- 通过代码实现gz压缩,并保持原来的文件名
写这篇博客主要是为了记录一下这两天来的研究成果-gz带原有文件名压缩.首先要说的是这个解决方案不是通过调用命令gzip来做的,而是通过java代码来实现的,其中用到了apache的common com ...
- linux下重启oracle服务:监听器和实例
一.在Linux下重启Oracle数据库及监听器: 方法1: 用root以ssh登录到linux,打开终端输入以下命令: cd $ORACLE_HOME #进入到oracle的安装目录 dbstart ...