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列)的迷宫中,存在着一个入 ...
随机推荐
- python编码规范、js编码规范及IDE的检查插件pylint/eslint等
一.python规范 参考:https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/的风格规范和语 ...
- CDN混战何去何从,史上最全分析
近日,CDN市场风起云涌,十几年平稳的市场格局瞬时战火纷飞.一路从传统CDN即蓝汛.网宿为主的 "双雄争霸".演变为多家云CDN厂商阿里云.腾讯云.百度云等的降价大战.更有 ...
- HDU 4886 TIANKENG’s restaurant(Ⅱ) hash+dfs
题意: 1.找一个字符串s使得 s不是给定母串的子串 2.且s要最短 3.s在最短情况下字典序最小 hash.,,结果t掉了...加了个姿势怪异的hash值剪枝才过.. #include <cs ...
- 各种软核处理器二进制文件FPGA初始化文件生成程序
不管是MIPS, Nios II, MicroBlaze, MSP430, 8051, OpenRISC, OpenSPARC, LEON2/LEON3等等软核处理器,在FPGA上实现的时候我们通常需 ...
- jQuery对象的序列化详解
一.param() 方法创建数组或对象的序列化表示. 该序列化值可在进行 AJAX 请求时在 URL 查询字符串中使用. 语法: jQuery.param(object,traditional) ob ...
- VMware安装报VT-x未开启的解决办法
摘自: http://www.bloomylife.com/?p=650 前段时间MSDN上放出WIN8最终版的ISO文件,心里一直痒痒.最近闲来无事,想体验下WIN8的魅力.考虑到新系统刚面世,在驱 ...
- Spark Streaming资源动态分配和动态控制消费速率
本篇从二个方面讲解: 高级特性: 1.Spark Streaming资源动态分配 2.Spark Streaming动态控制消费速率 原理剖析,动态控制消费速率其后面存在一套理论,资源动态分配也有一套 ...
- Java Web 设置默认首页 (也就是http://域名/项目名称/)访问的页面
第一种: 默认的是index.jsp页面,放在webapp文件夹下 在web.xml配置如下 第二种: 默认的页面不是放在webapp文件夹下,而是放在web-inf下,那么此时可以用springMV ...
- dhclient 简介
dhclient 就和它名字一样,用来通过 dhcp 协议配置本机的网络接口. 使用方法就是 #dhclient ifN # ifN 就是 ifconfig 中输出的接口名称,etc. eth0,wl ...
- 算法笔记_049:奇偶数排序(Java)
目录 1 问题描述 2 解决方案 2.1 一头一尾指针往中间扫描法 2.2 一前一后两个指针同时往后扫描法 1 问题描述 给定一个整数数组,请调整 数组中数的顺序,使得所有奇数位于数组的前半部分, ...