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 .在满足条 ...
随机推荐
- Follow me to learn what is repository pattern
Introduction Creating a generic repository pattern in an mvc application with entity framework is th ...
- Play 内置模板标签(1.2.3版本)http://www.anool.net/?p=617
a标签: 用来插入一个连接到控制器方法的html link.如下: #{a @Application.logout()}Disconnect#{/a}模板内容被解析后变成: <a href=&q ...
- 初识python(1)
1.python简介 Python是一种面向对象.直译式计算机程序语言.也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定. Python语法简捷而清晰,具有丰富和强大的类库.它 ...
- 最全的前端开发面试题及答案(js,css等等)
点击链接 https://github.com/HerbertKarajan/Fe-Interview-questions 我会不断的更新...... 若想自己留着,可以fork一下. 如果觉得不错, ...
- 打造高仿QQ的友盟反馈界面(MVP模式)
什么是MVP呢,简单来说就是将view层和逻辑完全独立出来,让逻辑和显示完全独立.本例中就是采用了这种模式,让activity作为view层,activity中涉及了适配器,所以这里尝试让适配器作为P ...
- 【读书笔记】iOS-GCD-Dispatch Source
一,Dispatch Source是BSD系内核惯有功能kqueue的包装. 参考资料:<Objective-C高级编程 iOS与OS X多线程和内存管理>
- 关灯游戏源码(iOS)
就是点一下灯 它本身和周围4盏灯会变色 ViewController.m文件 #import "ViewController.h" #import "UIView+cha ...
- Swift 中的函数(下)
学习来自<极客学院:Swift中的函数> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 import Foundation /******** ...
- iOS中倒计时
方法一:使用NSTimer来实现(比较适用于发送短信验证码倒计时) 主要是利用NSTimer的scheduledTimerWithTimeInterval方法来每秒执行一次changeTime方法 / ...
- OSX下VirtualBox安装CentOS
1.OSX上下载安装VirtualBox 2.新建虚拟机(所有选项默认即可) 3.启动虚拟机,选择CentOS安装镜像 CentOS-6.7-x86_64-minimal.iso 此处下载的是最小镜像 ...