较普通的走迷宫的题

传送门 :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)的更多相关文章

  1. codevs 2059 逃出克隆岛

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜索最新的rpg地图. 今天,他 ...

  2. AC日记——逃出克隆岛 (bfs)

    2059 逃出克隆岛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都 ...

  3. codevs2059逃出克隆岛(传送门bfs)

    /* 和普通的迷宫问题类似只是多了一个叫传送门的东西 对于传送门的处理: 每当跑到传送门就把其余所有传送门周围的点都入队 传送门之间不花费时间并且从不是传送门的点走到传送门 也不花费时间花费时间的(好 ...

  4. 使用 trash-cli 逃出 rm 命令误删除重要文件的阴影

    今天是一个难忘的日子,当时本来想清除我们公司网站cms目录下面一些cdn推送网页后残留的垃圾文件,结果在执行rm -rf conten* 时打成了rm -rf conten *结果就悲剧了.cms目录 ...

  5. 西南民族大学第十二届程序设计竞赛(同步赛) A.逃出机房 (bfs)

    题意:有来两个人A和B,A追B,A和B每次向上下左右移动一个单位,一共有两扇门,问A是否可以追上B(在门口追上也算合法). 题解:当时看题意说在门口也算?就觉得是判断两个人到门口的时间,对他们两个人分 ...

  6. 最短路【洛谷P3393】 逃离僵尸岛

    P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被 ...

  7. codevs 1144 守望者的逃离

    传送门 1144 守望者的逃离 2007年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解   题目描述 Description 恶 ...

  8. luogu P3393 逃离僵尸岛-搜索剪枝+spfa

    P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被 ...

  9. 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

随机推荐

  1. Android项目---语言适配

    android多国语言文件夹 android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中 ...

  2. Oracle wrap 和 unwrap( 加密与解密) 说明

    一. Wrap 说明 官网的说明如下: A PL/SQL Source Text Wrapping http://download.oracle.com/docs/cd/E11882_01/appde ...

  3. C#函数式程序设计之函数、委托和Lambda表达式

    C#函数式程序设计之函数.委托和Lambda表达式 C#函数式程序设计之函数.委托和Lambda表达式   相信很多人都听说过函数式编程,提到函数式程序设计,脑海里涌现出来更多的是Lisp.Haske ...

  4. QzzmServer v2.0正式版发布

                                 V2.1升级程序已发布,具体见下文                                首先,感谢网友的热情的测评及反馈,现Qzzm ...

  5. 关于Java、Python、Go编程思想的不同

    Go学习笔记 - 关于Java.Python.Go编程思想的不同 看了两周七牛团队翻译的<Go语言程序设计>,基本上领略到了Go语言的魅力.学习一个语言,语法什么的任何人都是很容易学会,难 ...

  6. EF-Code First(5):二级缓存

    EF-Code First(5):二级缓存 〇.目录 一.前言 二.缓存设计 (一) 引用EFProviderWrappers (二) 缓存代码分析及整合 1. 关键代码简介 2. 应用缓存扩展 三. ...

  7. network重启失败原因

    /etc/sysconfig/network-scripts/ifcfg-eth0   DEVICE='eth0'  eth0后面千万不能加空格之类的  

  8. hdu 4467 Graph

    P. T. Tigris is a student currently studying graph theory. One day, when he was studying hard, GS ap ...

  9. 给Activity切换加入动画

    在startActivity或finish()后,调用overridePendingTransition方法,可以加入动画效果.例如: 使用Android自带的淡入淡出:android.R.anim. ...

  10. Android应用中使用AsyncHttpClient来异步网络数据

    首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载 http://download.csdn.net/detail/xujinyang1234/5767419 测试的Ac ...