# 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. [Node.js] 00 - Where do we put Node.js

    Ref: 前后端分离的思考与实践(五篇软文) 其实就是在吹淘宝自己的Midway-ModelProxy架构. 第一篇 起因 为了提升开发效率,前后端分离的需求越来越被重视, 同一份数据接口,我们可以定 ...

  2. 理解AppDomain

    在传统的 Win32的程序中,进程是独立的运行空间, 在一些大型系统中, 通常都是将系统中的核心功能分解出来用独立的进程来处理,一方面是为了能获得更高的系统性能.吞吐量 .另一方面是为了能隔离功能之间 ...

  3. CF 954H Path Counting

    H. Path Counting time limit per test 5 seconds memory limit per test 256 megabytes input standard in ...

  4. D - Pagodas

    n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, l ...

  5. python 多返回值

    多返回值: def count(): fs = [] for i in range(1, 4): def f(j): def g(): return j*j return g fs.append(f( ...

  6. ERP项目实施记录01

    工厂8月中与某ERP服务商签约,至今已经过去4个月,顾问服务了13人天,进行了10次培训. 内部产生项目文档1个:物料编码方案 制度:0个 流程:无 因ERP服务商不是针对本行业的,在BOM和生产计划 ...

  7. .NET Core开发日志——Peachpie

    .NET Core的生态圈随着开源社区的力量不断注入至其中,正在变得越来越强盛,并且不时得就出现些有意思的项目,比如Peachpie,它使得PHP的代码迁移到.NET Core项目变得可能. 从创建简 ...

  8. Ubuntu 安装 .bundle 文件

    ubuntu安装VMware-Workstation-Full-15.0.2-10952284.x86_64.bundle 一.*.bundle 文件比较特殊,只有在给它了执行权限后才能执行安装操作. ...

  9. [No0000127]WCF安全体系netTCPBinding绑定

    netTCPBinding绑定之Transport安全模式 一.netTCPBinding 此绑定使用TCP传输协议,不具交互性,只适用于 WCF 到 WCF 的通信. 此绑定的传输安全性的实现:  ...

  10. 指数级计算复杂度 调用Fibonacci函数次数

    指数级计算复杂度 计算调用次数 #include <stdio.h> long fibonacciCallTimes(long n); int main(void) { long resu ...