BFS:

1. 从起点开始BFS,遇到X点则return;

2. vis[px][py][0]代表经过pxpy这点前还没有找到车;

 vis[px][py][1]代表经过pxpy这点前已经找到车;

3. ip记录是否找到车;

 d表示方向

4. 最后判断时间是否超时;

5. 简单的BFS,结束!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<string>
#include<cmath>
#define test printf("***\n")
#define ka getchar();getchar()
#define ka1 getchar()
#define iis std::ios::sync_with_stdio(false)
using namespace std;
typedef long long LL;
const int N = ;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-;
struct lp {
int x, y,d,ip,step;
friend bool operator <(const lp &a,const lp &b){
if(a.step!=b.step)return a.step>b.step;
return a.ip<b.ip;
}
} now, t;
int n, k;
char ar[N][N];
int dir[][] = {, , -, , , , , -};
bool vis[N][N][];
int bfs(int a, int b)
{
priority_queue<lp>Q;
memset(vis,,sizeof(vis));
t.x = a; t.y = b;
t.d = -;t.ip=;
t.step=;
Q.push(t);
vis[a][b][]=;
while(!Q.empty()) {
t = Q.top(); Q.pop();
for(int i = ; i < ; ++i) {
int px = t.x + dir[i][], py = dir[i][] + t.y;
if(px < || py < || px >= n || py >= n)continue;
if(ar[px][py] == 'O')continue;
if(t.step>k)return ;
if(t.ip == ) {
if(vis[px][py][])continue;
if(t.d != - && t.d != i)continue;
if(t.d != -) {
now.d = -;now.ip=;
now.x = px; now.y = py;
vis[px][py][]=;
now.step = t.step + ;
if(ar[px][py]=='X')return now.step;
if(ar[px][py]=='C'){
now.ip=;
vis[px][py][]=;
}
Q.push(now);
} else {
now.d = i;now.ip=;
now.x = t.x; now.y = t.y;
now.step = t.step + ;
Q.push(now);
}
}else{
if(vis[px][py][])continue;
now.d = i;now.ip=;
now.x = px; now.y = py;
now.step = t.step + ;
if(ar[px][py]=='X')return now.step;
vis[px][py][]=;
Q.push(now);
}
}
}
return ;
}
int main()
{
int t;
scanf("%d", &t);
while(t--) {
int a, b;
scanf("%d%d", &n, &k);
for(int i = ; i < n; ++i) {
scanf("%s", &ar[i]);
for(int j = ; j < n; ++j) {
if(ar[i][j] == 'S')a = i, b = j;
}
}
int ans = bfs(a, b);
if(ans!=&&ans<=k) {
printf("YES\n%d\n", ans);
} else {
printf("NO\n");
}
}
return ;
}
/*
3
2 3
.X
S.
2 3
.X
SC
2 4
.X
S.
*/

题目:

https://www.nowcoder.com/acm/contest/93/H

2018年东北农业大学春季校赛-wyh的吃鸡的更多相关文章

  1. 牛客网 2018年东北农业大学春季校赛 L题 wyh的天鹅

    链接:https://www.nowcoder.com/acm/contest/93/L来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒空间限制:C/C++ 262144K,其他语言524288 ...

  2. 牛客网 2018年东北农业大学春季校赛 I题 wyh的物品

    链接:https://www.nowcoder.com/acm/contest/93/I 来源:牛客网 时间限制:C/C++ 5秒,其他语言10秒空间限制:C/C++ 262144K,其他语言5242 ...

  3. 2018年东北农业大学春季校赛 K wyh的数列【数论/斐波那契数列大数取模/循环节】

    链接:https://www.nowcoder.com/acm/contest/93/K来源:牛客网 题目描述 wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F( ...

  4. 2018年东北农业大学春季校赛 I wyh的物品【01分数规划/二分】

    链接:https://www.nowcoder.com/acm/contest/93/I来源:牛客网 题目描述 wyh学长现在手里有n个物品,这n个物品的重量和价值都告诉你,然后现在让你从中选取k个, ...

  5. 2018年东北农业大学春季校赛 F wyh的集合【思维】

    链接:https://www.nowcoder.com/acm/contest/93/F来源:牛客网 题目描述 你们wyh学长给你n个点,让你分成2个集合,然后让你将这n个点进行两两连接在一起,连接规 ...

  6. 2018年东北农业大学春季校赛 D wyh的迷宫【搜索】

    链接:https://www.nowcoder.com/acm/contest/93/D来源:牛客网 题目描述 给你一个n*m的迷宫,这个迷宫中有以下几个标识: s代表起点 t代表终点 x代表障碍物 ...

  7. 2018年东北农业大学春季校赛 B wyh的矩阵【找规律】

    链接:https://www.nowcoder.com/acm/contest/93/B来源:牛客网 题目描述 给你一个n*n矩阵,按照顺序填入1到n*n的数,例如n=5,该矩阵如下 1 2 3 4 ...

  8. 2018年东北农业大学春季校赛 E wyh的集合 【数学】

    题目链接 https://www.nowcoder.com/acm/contest/93/F 思路 其实容易知道在两个不同集合里 假设元素个数 分别为 a b 然后对于第一个集合里的每一个元素 都可以 ...

  9. 2018年东北农业大学春季校赛 E wyh的阶乘 【数学】

    题目链接 https://www.nowcoder.com/acm/contest/93/E 思路 其实就是找阶乘的项中5的个数 末尾为什么会出现0 因为存在5的倍数和偶数相乘 有0存在 借鉴 htt ...

随机推荐

  1. sudo解决方案企业级应用实战

    visudo 编辑sudo配置文件 which  查找命令所在路径 例:touch /etc/oldboy.txt  没证件 sudo touch /etc/oldboy.txt  可以 内置命令没路 ...

  2. (2)Deep Learning之线性单元和梯度下降

    往期回顾 在上一篇文章中,我们已经学会了编写一个简单的感知器,并用它来实现一个线性分类器.你应该还记得用来训练感知器的『感知器规则』.然而,我们并没有关心这个规则是怎么得到的.本文通过介绍另外一种『感 ...

  3. 小程序input输入框获取焦点时,文字会出现闪动

    最近在开发小程序时,发现一个有趣的现象.input里面设置了placeholder,随后当输入框获取焦点时,文字会出现一瞬间的抖动,随后正常. 猜想可能是设置的font-family不同引起的抖动,但 ...

  4. mysql的下载安装

    不知道为什么,写这篇文章我总是想感慨一下.首先我的感谢和敬佩那些能把知识和技术分享出来的开发者,不管你的技术是否很牛,但是你的精神让我十分敬佩.学java的已经二天了,除了问问朋友,给我最大帮助的就是 ...

  5. C++学习-11

    虚函数表,调试下断点,指针的自动变量 含有虚函数的类,它的内部含有虚指针指向虚函数表,此时的空类占有4个字节,不管有多少个虚函数,只需要一个虚函数指针指向虚函数表就可以了 构造函数不可以是虚函数,如果 ...

  6. http进阶

    前言: 上一篇博文已经说到了,apache2.4简单的配置,端口,持久连接,MPM,DSO,路径下基于来源控制,页面特性,日志设置 安全域,虚拟主机等等. 一:URL URL是互联中获取标记资源的方式 ...

  7. VM及centOS系统安装

    虚拟机安装linux及配置

  8. pc端响应式-媒体查询

    媒体查询(@media):能在不同的条件下使用不同的样式,使页面在不同在终端设备下达到不同的渲染效果 列举常用的pc屏幕宽度: 1024  1280  1366  1440  1680  1920  ...

  9. linux下安装软件

    业界的软件标准安装有三步:configure,make,make install,下面是它们的定义: ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不 ...

  10. NGUI_Font

    三.NGUI中的UI字体制作 1.概述: 系统中提供的字体 比较少,而UI字体又是使用最为频繁的,不能因为单一的字体而损失用户量,则这个时候我们就可以通过Font Maker进行字体的制作. 2.动态 ...