逃出克隆岛 (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个城市已经被僵尸控制了,如果贸然闯入 ...
随机推荐
- ORACLE表建立自增列
create tablespace studentDBdatafile 'E:\datafiles_1.dbf' size 10m; create user Huang_Ying_Boidentifi ...
- C#算两个时间段相差的时间
在数据中经常算两个时间差或者在某个时间段的内容 在数据库中设计表字段类型的时候设计为varchar类型,然后进行可以再Sql语句中书写>=或者<=这样的进行比较就可以查询出某个时间段的内容 ...
- NoSQL发展简史、粗略分类及选择
这里对近来看的部分NoSQL资料做一个汇总记录,主要包括简史.粗略分类及数据库选择的考虑事项.NoSQL常见的解释是“non-relational”,有时也称作Not Only SQL. 1. ...
- 图解JS的传值与传址
//编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值.与传址. //先讲讲赋值操作 //下例是原始类型赋值操作 var a=1,b=a,a=2; console.log("a=& ...
- python学习之路三(文件读写)
# -*- coding: utf-8 -* ''' Created on 2013-7-29 @author: lixingle ''' import os #引入操作文件和目录的函数包 impor ...
- 简明CSS属性:定位
简明CSS属性:定位 第一话 定位 (Positioning) 关键词:position/z-index/top/bottom/right/left/clip POSITION 该属性用来决定元素在页 ...
- 页面缓存OutputCache
更新页面缓存OutputCache 为什么要使用OutputCache 我认为OutputCache是最简单的缓存技术了,它针对的是页面级别的,简单的一条指令就可以达到缓存的效果,有效的减轻服务器 ...
- linux学习之linux的hostname修改详解《转》
linux的hostname是一个kernel变量,可以通过hostname命令来查看本机的hostname.也可以直接cat /proc/sys/kernel/hostname查看. #hostna ...
- Linux epoll总结
Linux epoll总结 Linux epoll epoll是Kernel 2.6后新加入的事件机制,在高并发条件下,远优于select.epoll最大的好处在于它不会随着监听fd数目的增长而降低 ...
- Arduino 串口篇 Arduino发送十六进制 send HEX via serial port RS232-to-USB to PC
发送十六进制比较直观,可以在上位机中直接获取十六进制的数据,然后在在上位机上将十六进制HEX转换成BIN(二进制)或者DEC(十进制)就十分简单有效了. 下面是在Arduino上怎么演示直接发送16进 ...