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列)的迷宫中,存在着一个入 ...
随机推荐
- [转]使用SSIS创建同步数据库数据任务
本文转自:http://www.cnblogs.com/heqichang/archive/2012/09/19/2693214.html SSIS(SQL Server Integration Se ...
- iOS:菜单控制器和菜单项:UIMenuController和UIMenuItem
菜单控制器和菜单项:弹出自定义的菜单栏窗口 提示: 1. Menu所处的View必须实现 – (BOOL)canBecomeFirstResponder, 且返回YES2. Menu所处的View必须 ...
- Linux中线程使用详解
线程与进程为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题. 使用多线程的理由之一是和进程相比,它是一种非常"节俭&qu ...
- [转载]Delphi 版 everything、光速搜索代码
近日没啥事情,研究了一下 everything.光速搜索原理.花了一个礼拜时间,终于搞定. 废话不多说,直接上代码: unit uMFTSearchFile; { dbyoung@sina.com 2 ...
- Django开发流程及实例
创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位 ...
- axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器
1.小小的提一下vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一道 ...
- IE测试CSS兼容性测试
我们知道IE6~8是现在浏览器的主流.但是由IE6开始,我们已经知道IE并不是完全执行W3C标准.我们在编程的时候往往遇到只兼容某一种浏览器. 我们以前经常使用IE Test进行IE的兼容性测试.但是 ...
- 在笛卡尔坐标系上描绘函数 y=4x^2-2/4x-3
代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...
- 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况
在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...
- Codeforces Beta Round #17 C. Balance (字符串计数 dp)
C. Balance time limit per test 3 seconds memory limit per test 128 megabytes input standard input ou ...