NYOJ 迷宫寻宝(一)
# 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 迷宫寻宝(一)的更多相关文章
- nyoj 82 迷宫寻宝(一)
点击打开链接 迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...
- Unity3D实现立体迷宫寻宝
Unity3D实现立体迷宫寻宝 这个小游戏是一个白痴在一个昏暗的房间走动找到关键得分点,然后通关游戏.入门Unity3D做的第一款游戏,比较无聊,但实现了一般的游戏功能.如,人物控制,碰撞检测,主控制 ...
- 迷宫寻宝(一)(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 ...
- NYOJ82 迷宫寻宝(一)【BFS】
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 一个叫ACM的寻宝者找到了一个藏宝图.它依据藏宝图找到了一个迷宫,这是一个非常特别的迷宫,迷宫里有N个 ...
- nyoj 82 迷宫寻宝(二)
http://acm.nyist.net/JudgeOnline/problem.php?pid=83 题目解法主要在于判断两线段是否相交,思路是穷举所有地图四周的点,其中每一个边界上的点和终点构成一 ...
- nyoj 83:迷宫寻宝(二)(计算几何)
题目链接 枚举所有墙的2n个端点与宝物的位置作为一条线段(墙的端点必定与边界重合), 求出与之相交的最少线段数(判断线段相交时用跨立实验的方法),+1即为结果. #include<bits/st ...
- Problem 2285 迷宫寻宝
http://acm.fzu.edu.cn/problem.php?pid=2285 Problem Description 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入 ...
随机推荐
- 条件变脸pthread_cond_signal丢失问题
直接上代码: static bsem_t bsem; void* t1(void *arg) { /*printf("enter task 1\n");*/ /*while(1)* ...
- Hook lua库函数时遇到的问题
最近在为distri.lua实现一个lua调试系统,有一个简单的需求,lua导入一个文件的时候,将这个文件的文件名记录下来, 以方便调试器在设置断点的时候判断是否一个合法的文件. lua导入文件是通过 ...
- B - 取(2堆)石子游戏
有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者. ...
- vbox 的 ova 提取vmdk 与 vdi 以及扩容
原文: http://blog.csdn.net/flm2003/article/details/11980863 1. 从ova提取vmdk: tar xvf oldImage.ova => ...
- maven 配置mirror后,本地库与远端库冲突
settings.xml中主要包括以下元素: localRepository interavtiveMode offline pluginGroups proxies servers mirrors ...
- 【mysql】---php链接数据库---【巷子】
一.创建public文件 <?php //第一件事情连接数据库 header("content-type:text/html;charset=utf8"); //服务器地址 ...
- TOP100summit2017:网易测试总监钱蓓蕾——新时代测试正走向精英化、自动化、智能化
壹佰案例:钱蓓蕾老师您好,很荣幸邀请到您成为第六届壹佰案例峰会测试专场的联席主席.您从事测试工作11年了,您觉得最近几年测试工作有什么趋势上的变化么? 钱蓓蕾:测试行业近几年变化挺大的,正逐渐向精英化 ...
- 如何通过automator创建自动化备份任务?
Windows用户对于Task Scheduler应该不陌生,但是到了macOS因该用什么呢?那就是automator,今天因为有一个个人使用需求:备份一个移动硬盘中的文件,但是又不想完全手动.怎么办 ...
- ML.NET教程之出租车车费预测(回归问题)
理解问题 出租车的车费不仅与距离有关,还涉及乘客数量,是否使用信用卡等因素(这是的出租车是指纽约市的).所以并不是一个简单的一元方程问题. 准备数据 建立一控制台应用程序工程,新建Data文件夹,在其 ...
- IAR 跳转路径错误
拷贝的代码 右键跳转的时候提示路径错误,是因为别人编译的中间文件 .ojb文件在你的电脑上不一样,拷贝代码后第一件事就是清楚obj中间连接文件,然后重新在你的电脑上编译.