ny82 迷宫寻宝(一) map+queue
题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=82
AC代码:讲解,先统计在可搜索范围内对应的钥匙数,把搜到的门存到另外的一个队列中,第一个搜索结束后,开始看搜到的钥匙能否打看门,
如果能打看门,存到第一个队列中,在进行搜寻,知道找到宝藏,或者什么也没有找到,则退出;
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
map<char,int >key;
map<char,int >key1;
int dir[][]={,-,,,-,,,};
char mapp[][];
int vis[][];
int s1,s2,e1,e2,m,n;
struct T
{
int x,y;
}now,eed;
struct KEY
{
int x,y;
}ee,nn;
int bfs()
{
vis[s1][s2]=;
queue< T >aa;
queue< KEY >bb;
now.x=s1; now.y=s2;
aa.push(now);
while()
{
while(!aa.empty())//搜寻可以搜的地方,搜到门,存到下一个队列中;
{
eed=aa.front();
aa.pop();
if(eed.x==e1 && eed.y==e2)
return ;
for(int i=; i<; i++)
{
now.x=eed.x+dir[i][];now.y=eed.y+dir[i][];
if(now.x> && now.x<=m && now.y> && now.y<=n && mapp[now.x][now.y]!='X' && vis[now.x][now.y]==)
{
if(mapp[now.x][now.y]>='a' && mapp[now.x][now.y]<='e')// 钥匙
{ key1[mapp[now.x][now.y]]++,aa.push(now); }
else if(mapp[now.x][now.y]=='.' || mapp[now.x][now.y]=='G')
aa.push(now);
else if(mapp[now.x][now.y]>='A' && mapp[now.x][now.y]<='E')
{
nn.x=now.x; nn.y=now.y;
bb.push(nn);
}
vis[now.x][now.y]=;
}
}
}
int siz=bb.size();
while(!bb.empty() && siz--)//遍历搜到的门,看能否打开,如果能的话,存到第一个队列中,再次搜索;
{
nn=bb.front();
if(key[mapp[nn.x][nn.y]+]==key1[mapp[nn.x][nn.y]+] && key[mapp[nn.x][nn.y]+]>)
{ now.x=nn.x;now.y=nn.y;
aa.push(now);bb.pop();
}
else bb.push(nn),bb.pop();
}
if(aa.empty())//如果队列1,为空证明,路已经走不下去了,结束搜索;
return ;
}
return ;
}
int main()
{
while(cin>>m>>n && m+n)
{
key.clear();key1.clear();
memset(vis,,sizeof(vis));
for(int i=; i<=m ;i++)
for(int j= ;j<=n; j++)
{
cin>>mapp[i][j];
if(mapp[i][j]=='S')
s1=i,s2=j;
else if(mapp[i][j]=='G')
e1=i,e2=j;
else if(mapp[i][j]>='a' && mapp[i][j]<='e')//统计总共的钥匙的个数;
key[mapp[i][j]]++;
}
int ans=bfs();
if(ans==)
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return ;
//3 4
//S.XX
//.aXB
//b.AG
}
ny82 迷宫寻宝(一) map+queue的更多相关文章
- nyoj 82 迷宫寻宝(一)
点击打开链接 迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...
- 迷宫寻宝(一)(bfs)
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...
- NYOJ82 迷宫寻宝(一)【BFS】
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 一个叫ACM的寻宝者找到了一个藏宝图.它依据藏宝图找到了一个迷宫,这是一个非常特别的迷宫,迷宫里有N个 ...
- Problem 2285 迷宫寻宝 (BFS)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 323 Submit: 1247Time Li ...
- 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝
Problem B 迷宫寻宝 Accept: 52 Submit: 183Time Limit: 1000 mSec Memory Limit : 32768 KB Problem De ...
- Unity3D实现立体迷宫寻宝
Unity3D实现立体迷宫寻宝 这个小游戏是一个白痴在一个昏暗的房间走动找到关键得分点,然后通关游戏.入门Unity3D做的第一款游戏,比较无聊,但实现了一般的游戏功能.如,人物控制,碰撞检测,主控制 ...
- Java中的容器类(List,Set,Map,Queue)
Java中的容器类(List,Set,Map,Queue) 一.基本概念 Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念: 1)Collection.一个独立元素的序列,这些元素都 ...
- hdoj--5233--Gunner II(map+queue&&二分)
Gunner II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- Problem 2285 迷宫寻宝
http://acm.fzu.edu.cn/problem.php?pid=2285 Problem Description 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入 ...
随机推荐
- hive如何使用中文查询条件
直接在hql中使用中文会报错:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.lang.RuntimeExceptio ...
- 如何解决weblogic server启动中在IIOP后运行缓慢
WebLogic Server在Linux环境中,有时因为linux OS的安全包没有安装,导致weblogic server 在启动的时候会在长时间的停留在 <2/07/2009 08:54: ...
- word-wrap,word-break,white-space,text-overflow的区别和用法
在div中,文本布局经常出现,换行混乱的情况. 问题表现:1.如果是全英文字符串,中间不包含任何符号(包括空格),不自动换行. 2.中英文混写,则在英文字符串的开始处换行(英文长 ...
- 如何在Centos7上安装zookeeper 多实例
一.如何在Centos7上安装zookeeper 多实例 cd /usr/local/src/ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zoo ...
- supervise 用来监控服务,自动启动
Atong介绍的这个工具,挺好用的.supervise 官方网站: https://cr.yp.to/daemontools.html cd /data/test cat test.c #includ ...
- 记一次vue2路由参数传递this指针问题
需要船体一个data()内的对象到另一个页面. <player-card v-for="(note, key) in sortedtNodes" :imgurl=" ...
- 【Spark】RDD操作具体解释2——值型Transformation算子
处理数据类型为Value型的Transformation算子能够依据RDD变换算子的输入分区与输出分区关系分为下面几种类型: 1)输入分区与输出分区一对一型 2)输入分区与输出分区多对一型 3)输入分 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-为什么无法打开官方范例的项目,打开tszip文件时提示尝试越过结尾怎么办
打开新的解决方案,找到tszip文件 提示错误Advanced Setting时越过结尾 到这里一般VS会卡死 但是我们已经可以得到解压出来的文件夹,其中包含PLC的完整项目文件夹,可以新 ...
- Navicat for SQL Server创建连接提示错误08001怎么办
创建连接之后提示如下错误 打开SQL Server配置工具,把能打开的都打开(什么远程连接,什么SQL Server Browser之类的) 你再创建连接的时候就有不止一个连接了,连那些Named P ...
- iOS项目开发实战——使用CoreLocation获取当前位置信息
随着基于位置服务LBS和移动互联网的兴起,你的位置是越来越重要的一个信息.位置服务已经是当前的热门应用如微信.陌陌等社交应用的杀手锏.而在iOS开发中,苹果已经给我们提供了一个位置接口.CoreLoc ...