逃出克隆岛 (codevs 2059)
较普通的走迷宫的题
传送门 :codevs 2059 逃出克隆岛
思路 :BFS 即可 PS :传送门 不必重复使用
#include <iostream>
#include <cstdio>
#define Max 2020
using namespace std;
int N, M;
int start_x, start_y, end_x, end_y;
int move_x [] = {, -, , }, move_y [] = {, , , -};
char map [Max][Max];
int queue [Max][];
int cost [Max * ];
bool door [Max][Max], visit [Max][Max];
bool flag;
int pay;
void BFS (int start_x, int start_y)
{
int head_cur = , tail_cur = ;
visit [start_x][start_y] = true; //标记当前点为 已访问
queue [][] = start_x; //将起点入队列
queue [][] = start_y;
cost [] = ; // 当前的花费为0
while (head_cur < tail_cur)
{
head_cur++;
for (int i = ; i <= ; i++)
{
int x = queue [head_cur][] + move_x [i];
int y = queue [head_cur][] + move_y [i];
if (x == end_x && y == end_y) // 如果到达了终点, flag 标记为 true 直接输出花费即可
{
flag = true;
cout << cost [head_cur];
return;
}
if (x > && x <= N && y > && y <= M && map [x][y] != '#' && visit [x][y] == false) // 在边界内,且当前点 不是障碍点 且当前点未访问
{
if (door [x][y] == true) //如果此点为传送门,且当前传送门可以走
{
door [x][y] = false; // 标记为已走
for (int i = ; i <= N; i++)
for (int j = ; j <= M; j++) //在全图内搜索 可走的传送门
if (door [i][j] == true)
{
tail_cur++;
queue [tail_cur][] = i; //将当前传送到的位置加入队列
queue [tail_cur][] = j;
door [i][j] = false; // 标记此传送门为已走
cost [tail_cur] = cost [head_cur]; //由于传送门没有花费, 所以等于前一个点的花费
}
}
tail_cur++; // 如果不是传送门 ,将当前位置加入队列
queue [tail_cur][] = x;
queue [tail_cur][] = y;
visit [x][y] = true; // 标记为已访问
if (map [x][y] == '*') //如果走此点需要花费
cost [tail_cur] = cost [head_cur] + pay; // 上一个点的花费 再加一次花费 即为当前位置的花费
else
cost [tail_cur] = cost [head_cur]; // 若是普通点,则当前点的花费等于上一个点的花费
}
}
}
}
int main()
{
ios :: sync_with_stdio (false);
cin >> N >> M >> pay;
for (int i = ; i <= N; i++)
for (int j = ; j <= M; j++)
{
cin >> map [i][j];
if (map [i][j] == 'Y') // 记录起点
{
start_x = i;
start_y = j;
}
else if (map [i][j] == 'C') //记录终点
{
end_x = i;
end_y = j;
}
else if (map [i][j] == 'P') //记录传送门的位置 标记当前传送门可访问
door [i][j] = true;
}
BFS (start_x, start_y);
if (flag == false) // 若走不通
cout << "screw you!";
return ;
}
逃出克隆岛 (codevs 2059)的更多相关文章
- codevs 2059 逃出克隆岛
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图. 今天,他 ...
- AC日记——逃出克隆岛 (bfs)
2059 逃出克隆岛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都 ...
- codevs2059逃出克隆岛(传送门bfs)
/* 和普通的迷宫问题类似只是多了一个叫传送门的东西 对于传送门的处理: 每当跑到传送门就把其余所有传送门周围的点都入队 传送门之间不花费时间并且从不是传送门的点走到传送门 也不花费时间花费时间的(好 ...
- 使用 trash-cli 逃出 rm 命令误删除重要文件的阴影
今天是一个难忘的日子,当时本来想清除我们公司网站cms目录下面一些cdn推送网页后残留的垃圾文件,结果在执行rm -rf conten* 时打成了rm -rf conten *结果就悲剧了.cms目录 ...
- 西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)
题意:有来两个人A和B,A追B,A和B每次向上下左右移动一个单位,一共有两扇门,问A是否可以追上B(在门口追上也算合法). 题解:当时看题意说在门口也算?就觉得是判断两个人到门口的时间,对他们两个人分 ...
- 最短路【洛谷P3393】 逃离僵尸岛
P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被 ...
- codevs 1144 守望者的逃离
传送门 1144 守望者的逃离 2007年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 恶 ...
- luogu P3393 逃离僵尸岛-搜索剪枝+spfa
P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被 ...
- 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]
题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...
随机推荐
- c#线程的几种启动方法
一 启动普通线程 ThreadStart与ParameterizedThreadStart建立新线程 优缺点:简单,但难于管理,线程过多会影响系统的性能. 二 启动CLR线程池的工作者线程(普通线程和 ...
- 自己动手实现Expression翻译器 – Part Ⅱ
上一节我们了解了Linq查询大体上是如何运转的,并针对SQL表达式进行建模(DbExpression),这一节的重点在于如何将表达式转换为DbExpression. 可以说只要能生成结构清晰的DbEx ...
- DropDownList和GridView用法
DropDownList和GridView用法 DropDownList控件和GridView控件在Asp.net中相当常用,以下是控件的解释,有些是常用的,有些是偶尔的,查找.使用.记录,仅此而 ...
- Android最新支持包Design简介
Android 5.0 Lollipop是曾经最著名的Android发布之一,这样说很大一部分原因是材料设计的引入,而材料设计则是一种刷新了整个Android体验的设计语言.这个详细说明是开始适应材料 ...
- Sqoop自定义多字节列分隔符
Sqoop提供的--fields-terminated-by选项可以支持指定自定义的分隔符,但是它只支持单字节的分隔符,对于我们特殊的需求:希望使用双字节的“|!”,默认的是不支持的. Sqoop在进 ...
- IOS UI 第九篇: UITABLEVIEW
学英语.所以用英文来记录笔记. Define the dataSource: @implementation ViewController{ NSMutableArray *dataSo ...
- 优秀Python学习资源
优秀Python学习资源收集汇总(强烈推荐) Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮 ...
- WCF 自承载
WCF 自承载 提供源码 一.WCF 简单介绍 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,是一套通讯接口.现在比较流行的S ...
- Linux环境fork()函数详解
Linux环境fork()函数详解 引言 先来看一段代码吧, 1 #include <sys/types.h> 2 #include <unistd.h> 3 #include ...
- IceMx.Mvc 我的js MVC 框架 开篇
开篇 这篇文章是后补的,前端时间想写一些对于js开发的一些理解,就直接写了,后来发现很唐突,所以今天在这里补一个开篇. 我的js Mvc 框架 基于实用设计,过分设计等于没设计.本着简单的原则,它只实 ...