# include<iostream>
# include<string>
# include<string.h>
# include<queue>
# include<stdio.h>
# include<math.h>
#include <algorithm>
using namespace std;
char d[][];
int a[],b[];
struct Node
{
int x,y;
int num;
}node,temp,f[];
queue<Node> q,q1;
void bfs(int x,int y,int m,int n)
{
int k;
node.x = x;
node.y = y;
q.push(node);
d[x][y] = '';
while(!q.empty())
{
temp = q.front();
q.pop();
for(int i=;i<;i++)
{
int t1,t2;
t1 = temp.x + f[i].x;
t2 = temp.y + f[i].y;
if(t1< ||t1>=m || t2< || t2>=n)
continue;
if(d[t1][t2] == 'G')
{
printf("YES\n");
return;
}
else if(d[t1][t2] == '' || d[t1][t2] == 'X')
{
continue;
}
else if(d[t1][t2] == 'A' || d[t1][t2] == 'B' || d[t1][t2] == 'C' || d[t1][t2] == 'D' || d[t1][t2] == 'E')
{
k = d[t1][t2] - 'A';
if(b[k]>=a[k] && a[k]!=)
{
d[t1][t2] = '';
node.x = t1;
node.y = t2;
q.push(node);
}
else
{
node.x = t1;
node.y = t2;
node.num = k;
q1.push(node);
}
}
else if(d[t1][t2] == '.' || d[t1][t2] == 'a' || d[t1][t2] == 'b' || d[t1][t2] == 'c' || d[t1][t2] == 'd' || d[t1][t2] == 'e')
{ if(d[t1][t2]!='.')
{
k = d[t1][t2] - 'a';
b[k]++;
}
d[t1][t2] = '';
node.x = t1;
node.y = t2;
q.push(node);
} } if(q.empty()==true && q1.empty()!=true)
{
k = q1.size();
for(int i=;i<k;i++)
{
temp = q1.front();
q1.pop();
if(b[temp.num]>=a[temp.num] && a[temp.num]!=)
{
q.push(temp);
d[temp.x][temp.y] = '';
}
else
{
q1.push(temp);
}
}
} }
//要清空q1
while(!q1.empty())
{
q1.pop();
}
printf("NO\n");
}
int main()
{
int n,m,i,j,x,y;
f[].x=;f[].y=;
f[].x=;f[].y=-;
f[].x=;f[].y=;
f[].x=-;f[].y=;
scanf("%d %d",&m,&n);
getchar();
while(n!= || m!=)
{
for(i=;i<;i++)
{
a[i] = ;
b[i] = ;
} //要重置d数组
for(i=;i<;i++)
for(j=;j<;j++)
d[i][j]='';
for(i=;i<m;i++)
{
for(j=;j<n;j++)
{
scanf("%c",&d[i][j]);
if(d[i][j]=='S')
{
x = i;
y = j;
}
if(d[i][j]=='a') a[]++;
else if(d[i][j]=='b') a[]++;
else if(d[i][j]=='c') a[]++;
else if(d[i][j]=='d') a[]++;
else if(d[i][j]=='e') a[]++;
}
getchar();
} bfs(x,y,m,n); /*
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%c",d[i][j]);
}
printf("\n");
}
*/
scanf("%d %d",&m,&n); //WA原因 少了这句话
getchar();
}
return ;
}

NYOJ 迷宫寻宝(一)的更多相关文章

  1. nyoj 82 迷宫寻宝(一)

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

  2. Unity3D实现立体迷宫寻宝

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

  3. 迷宫寻宝(一)(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. NYOJ82 迷宫寻宝(一)【BFS】

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

  7. nyoj 82 迷宫寻宝(二)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=83 题目解法主要在于判断两线段是否相交,思路是穷举所有地图四周的点,其中每一个边界上的点和终点构成一 ...

  8. nyoj 83:迷宫寻宝(二)(计算几何)

    题目链接 枚举所有墙的2n个端点与宝物的位置作为一条线段(墙的端点必定与边界重合), 求出与之相交的最少线段数(判断线段相交时用跨立实验的方法),+1即为结果. #include<bits/st ...

  9. Problem 2285 迷宫寻宝

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

随机推荐

  1. gdb 脚本调试

    在使用gdb调试程序的时候,有时候需要设定多个断点,重复执行某些操作,而这些操作写起来比较麻烦,这个时候就应该想起来用gdb命令脚本了,它能够很好的完成这些工作.以设置多个断点为例,我写的命令脚本为- ...

  2. ASP.NET MVC 4 (八) URL链接和Ajax帮助函数

    使用帮助函数创建链接 MVC提供一些帮助函数创建链接,这些函数根据路径映射表自动调整生成的URL: 说明 示例 输出结果 应用程序相对URL Url.Content("~/Content/S ...

  3. 配置openssh实现sftp远程文件上传

    客服端:winscp等ftp/sftp客户端 服务器:阿里云默认使用的openssh 需求:可以sftp远程传输文件到服务器固定文件夹下,不可远程ssh登录 步骤: 1. 建立系统用户ftpuser及 ...

  4. C#设计模式--观察者模式(发布-订阅模式)

    0.C#设计模式--简单工厂模式 1.C#设计模式--工厂方法模式 2.C#设计模式--抽象工厂模式 3.C#设计模式--单例模式 4.C#设计模式--建造者模式 5.C#设计模式--原型模式 6.C ...

  5. Flask web开发之路十一

    首先写一下cookie和session的概念,然后是Flask中session的工作机制以及操作session ### cookie: 1. `cookie`出现的原因:在网站中,http请求是无状态 ...

  6. textarea 标签 属性

    textarea 标签 resize: vertical; 禁止横向拉伸 x resize: horizontal; 禁止竖向拉伸 y resize: none; 去掉拖动按钮

  7. A - Calendar

    A - Calendar Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit ...

  8. Jenkins设置备份

    安装备份插件,系统管理-插件管理 可选插件搜索backup 备份 系统管理-Backup manager 设置备份路径 恢复

  9. redis集群,主从,持久化

    1,单机版 先安装gcc   yum install gcc-c++ 然后解压源码包,执行编译命令make(C语言写的,需要gcc环境),最后安装Redis,需要通过PREFIX指定安装路径make ...

  10. ORM 简介 单表操作

    cls超 Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型 ...