较普通的走迷宫的题

传送门 :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. ASP.NET MVC IOC 之AutoFac

    ASP.NET MVC IOC 之AutoFac攻略 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天, ...

  2. 一个ERP系统的磕磕碰碰

    历时5个月的开发,终于可以交付使用了.在这期间系统从需求分析.系统架构设计.开发.测试.运行.迭代.交付,整个忐忑波荡的一路走来,终于有时间静下心来写一篇总结跟各位博友一起探讨.学习了.如果对大家有帮 ...

  3. .NET源码

    值得珍藏的.NET源码,不保存就没机会了 很早以前,我们通过http://referencesource.microsoft.com/netframework.aspx可以下载到.NET的各版本公开源 ...

  4. Redis .NET开源组件Beetle.Redis

    Redis .NET开源组件Beetle.Redis Beetle.Redis是一款开源的Redis Client for .net组件,它提供非常简便的操作方式可以让开发人员轻松地访问Redis,同 ...

  5. 使用VS2010命令提示窗口操作程序集强命名

    说明:文中示例均以将文件置于D盘根目录(D:\)下为例. 一.查看程序集是否具有强命名 sn -T d:\LicBase.dll 若有则会显示PublicKeyToken值,反之不会. 二.给无强命名 ...

  6. [RM 状态机详解1] RMApp状态机详解

    概述 Apache Hadoop 2.0在Hadoop 1.0基础上做了许多的重构工作,代码上的重构最大的变化在于引入状态机处理各个角色的状态与变迁,使用状态机是得代码结构更加清晰,方便异步处理各种操 ...

  7. ios7学习之路六(隐藏状态栏 )

    方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用:      if ([self respondsTo ...

  8. 如何判断一个对象是否为jquery对象

    当我们在用jquery的each做循环遍历的时候常常会使用到this 而有时候我们不知道this所指的到底是什么,因为要使用jquery 的方法 前提此对象必须是jquery对象. 另外要判断一个ja ...

  9. jquery选择器之基本过滤选择器

    <style type="text/css"> /*高亮显示*/ .highlight{ background-color: gray } </style> ...

  10. speedbar , tabbar 还有linum-mode

    我的Emacs折腾经验谈(三) speedbar , tabbar 还有linum-mode 离上一篇博客已经很遥远了,最近总是各种逛,但没有心思静下来写点东西,这回写一下我之前用的一些东西. Spe ...