题目地址: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的更多相关文章

  1. nyoj 82 迷宫寻宝(一)

    点击打开链接 迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...

  2. 迷宫寻宝(一)(bfs)

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...

  3. NYOJ82 迷宫寻宝(一)【BFS】

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 一个叫ACM的寻宝者找到了一个藏宝图.它依据藏宝图找到了一个迷宫,这是一个非常特别的迷宫,迷宫里有N个 ...

  4. Problem 2285 迷宫寻宝 (BFS)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 323    Submit: 1247Time Li ...

  5. 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝

    Problem B 迷宫寻宝 Accept: 52    Submit: 183Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem De ...

  6. Unity3D实现立体迷宫寻宝

    Unity3D实现立体迷宫寻宝 这个小游戏是一个白痴在一个昏暗的房间走动找到关键得分点,然后通关游戏.入门Unity3D做的第一款游戏,比较无聊,但实现了一般的游戏功能.如,人物控制,碰撞检测,主控制 ...

  7. Java中的容器类(List,Set,Map,Queue)

    Java中的容器类(List,Set,Map,Queue) 一.基本概念 Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念: 1)Collection.一个独立元素的序列,这些元素都 ...

  8. hdoj--5233--Gunner II(map+queue&&二分)

     Gunner II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  9. Problem 2285 迷宫寻宝

    http://acm.fzu.edu.cn/problem.php?pid=2285 Problem Description 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入 ...

随机推荐

  1. The file “Info.plist” couldn’t be opened because there is no such file

    修改了Info.plist的实际文件位置(项目和单元测试对应不同的Info.plist),报错 (null): could not read data from '/Users/xxxxx/Deskt ...

  2. 二十四种设计模式:访问者模式(Visitor Pattern)

    访问者模式(Visitor Pattern) 介绍表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 示例有一个Message实体类,某些对象对 ...

  3. C++ 初始化列表(转载)

    何谓初始化列表 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段.在 C++中,struct和class的唯一区别是 ...

  4. 破解IDEA Ultimate2017 测试

    转载:http://blog.csdn.net/linyanqing21/article/details/72594352 IntelliJ Idea 2017 免费激活方法: 1.到网站 http: ...

  5. MyEclipse 2014配置Maven

    1 配置maven (1)下载apache-maven-3.3.3和mvnRespo放在某个路径下,我这里是放在D盘根目录下. (2)修改D:\apache-maven-3.3.3\conf\sett ...

  6. linux 遇见错误Could not get lock /var/lib/dpkg/lock

    通过终端安装程序sudo apt-get install xxx时出错:E: Could not get lock /var/lib/dpkg/lock - open (11: Resource te ...

  7. Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈

    转载:https://www.cnblogs.com/firstdream/p/8109352.html 这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: l ...

  8. JS设计模式基础

    设计模式: 通过封装.继承.多态.组合等技术的反复使用,提炼出一些可重复使用的面向对象设计技巧. 1.多态(’做什么‘和’谁去做‘分开) 多态指同一个实体同时具有多种形式. 同一操作应用于不同的对象上 ...

  9. IPhone打包工具脚本

    (后面就是代码了,我就不翻译了.) #!/usr/bin/perl use File::Copy; my $installPath = $ARGV[]; #the name that displays ...

  10. JS 错误处理与调试

    在程序开发中难免会遇到一些错误,在成千上万的代码中去寻找错误非常明显相当于大海捞针.为此,每种计算机编程语言都要它独特的一套错误处理与调试机制.当然,JavaScript也不例外. 错误发生: 运行代 ...