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. [.NET]使用十年股价对比各种序列化技术

    1. 前言 上一家公司有搞股票,当时很任性地直接从服务器读取一个股票10年份的股价(还有各种指标)在客户端的图表上显示,而且因为是桌面客户端,传输的数据也是简单粗暴地使用Soap序列化.获取报价的接口 ...

  2. Navicat for MySQL下载、安装与破解

    一:下载Navicat for MySQL 进入 Navicat for MySQL下载 ,根据需要选择下载的版本,我选择的是Windows 64bit,任意选择一个镜像地址下载. 二:安装Navic ...

  3. Listener监听器生命周期

    一.Listener生命周期 listener是web三大组件之一,是servlet监听器,用来监听请求,监听服务端的操作. listener分为:(都是接口类,必须实现相应方法) 1.生命周期监听器 ...

  4. Java基础知识回顾之一 ----- 基本数据类型

    前言 在开始工作至今,学习各种各样的技术之中发现自己的很多Java的基础知识都忘了⊙﹏⊙b汗... 而且越是学习越是发现Java基础的重要性,所以准备单独抽一下时间进行Java基础的重新学习.在重新学 ...

  5. Docker学习——pinpoint部署

    Pinpoint Install pinpoint-server 下载镜像 docker pull yous/pinpoint 查看镜像 docker images 启动容器 docker run - ...

  6. spring boot rest例子

    简介: 本文将帮助您使用 Spring Boot 创建简单的 REST 服务. 你将学习 什么是 REST 服务? 如何使用 Spring Initializr 引导创建 Rest 服务应用程序? 如 ...

  7. Java设计模式(四)Builder建造者模式

    一.场景描述 建造者模式同工厂模式.抽象工厂模式一样,用于创建继承类对象. 工厂模式:http://www.cnblogs.com/mahongbiao/p/8618970.html 抽象工厂模式:h ...

  8. 11 个简单的 Java 性能调优技巧

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情.这 ...

  9. 《深入理解计算机系统》第7章:重定位PC相对引用的理解

    在第七章<链接>中的静态链接有对符号进行重定位PC相对引用的处理,书上对应的还有公式,但不是很好理解.现做实验对公式进行理解(公式内容如有兴趣可以参考原文)

  10. 笔记:Maven 仓库及配置详解

    本地创建默认路径在 用户目录\.m2\repository,如果需要自定义本地创建目录地址,可以编辑文件 用户目录\.m2\settings.xml(文件不存在,则需要从Maven安装目录的Conf目 ...