2018年东北农业大学春季校赛-wyh的吃鸡

Cwolf9 2018-04-05 原文

2018年东北农业大学春季校赛-wyh的吃鸡

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 = 110;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-8;
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[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
bool vis[N][N][10];
int bfs(int a, int b)
{
    priority_queue<lp>Q;
    memset(vis,0,sizeof(vis));
    t.x = a; t.y = b;
    t.d = -1;t.ip=0;
    t.step=0;
    Q.push(t);
    vis[a][b][0]=1;
    while(!Q.empty()) {
        t = Q.top(); Q.pop();
        for(int i = 0; i < 4; ++i) {
            int px = t.x + dir[i][0], py = dir[i][1] + t.y;
            if(px < 0 || py < 0 || px >= n || py >= n)continue;
            if(ar[px][py] == 'O')continue;
            if(t.step>k)return 0;
            if(t.ip == 0) {
                if(vis[px][py][0])continue;
                if(t.d != -1 && t.d != i)continue;
                if(t.d != -1) {
                    now.d = -1;now.ip=0;
                    now.x = px; now.y = py;
                    vis[px][py][0]=1;
                    now.step = t.step + 1;
                    if(ar[px][py]=='X')return now.step;
                    if(ar[px][py]=='C'){
                        now.ip=1;
                        vis[px][py][1]=1;
                    }
                    Q.push(now);
                } else {
                    now.d = i;now.ip=0;
                    now.x = t.x; now.y = t.y;
                    now.step = t.step + 1;
                    Q.push(now);
                }
            }else{
                if(vis[px][py][1])continue;
                now.d = i;now.ip=1;
                now.x = px; now.y = py;
                now.step = t.step + 1;
                if(ar[px][py]=='X')return now.step;
                vis[px][py][1]=1;
                Q.push(now);
            }
        }
    }
    return 0;
}
int main()
{
    int t;
    scanf("%d", &t);
    while(t--) {
        int a, b;
        scanf("%d%d", &n, &k);
        for(int i = 0; i < n; ++i) {
            scanf("%s", &ar[i]);
            for(int j = 0; j < n; ++j) {
                if(ar[i][j] == 'S')a = i, b = j;
            }
        }
        int ans = bfs(a, b);
        if(ans!=0&&ans<=k) {
            printf("YES\n%d\n", ans);
        } else {
            printf("NO\n");
        }
    }
    return 0;
}
/*
3
2 3
.X
S.
2 3
.X
SC
2 4
.X
S.
*/

View Code

 

posted on 2018-04-05 21:12 日常膜大佬~太强了 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为Cwolf9原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Cwolf9/p/8724309.html

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

  1. Security Guards (Gym – 101954B)( bfs + 打表 )

    题意及思路 题目主要是讲先给出所有guard的位置,再给出所有incidents的位置,求出guard到达每个 […]...

  2. Prime Path(POJ – 3126)【BFS+筛素数】

    Prime Path(POJ – 3126) 题目链接 算法 BFS+筛素数打表 1.题目主要就是 […]...

  3. Pots(POJ – 3414)【BFS 寻找最短路+路径输出】

    Pots(POJ – 3414) 题目链接 算法 BFS 1.这道题问的是给你两个体积分别为A和B […]...

  4. 自动驾驶系统 bfs

    一家科技公司有一块试验地用于测试自动驾驶系统。试验地由n×m个格子组成,从上到下依次编号为第1到n行,从左到右 […]...

  5. HDU 3085 Nightmare Ⅱ

    Nightmare Ⅱ   Last night, little erriyue had a horrible […]...

  6. HDU1241 Oil Deposits

    题目链接:https://vjudge.net/problem/HDU-1241Description The […]...

  7. POJ3984 迷宫问题

    题目链接:https://vjudge.net/problem/POJ-3984Description 定义一 […]...

  8. HDU – 1495

    非常可乐 题目链接: HDU 1495 题目: Problem Description 大家一定觉的运动以后喝 […]...

随机推荐

  1. 精确控制windows全局音量(Python)

    话不多说,直接上代码: 1 import ctypes,time 2 import comtypes 3 fr […]...

  2. JDK的下载与安装,Eclipse的下载与使用

    一,JDK的下载安装: (1)先登录Oracle官网的JDK下载界面(http://www.oracle.co […]...

  3. 一个完整的jmeter APP登录接口测试实例

    最终效果: 知识点: 通过HTTP信息头管理器, 正则表达式提取器 提取登录要用的token,memcard, […]...

  4. 算法刷题笔记-stack-四则运算

    算法刷题笔记-stack-四则运算 题目描述: 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算 […]...

  5. U盘启动快捷键查询列表

    U盘启动快捷键 开机出现主板画面时,按下快捷键后将会进入优先启动设置界面,里面会有出现个选项,咱们通过键盘方向 […]...

  6. django 中间件

    django 中间件 目录 django 中间件 自定义中间件 中间件可以定义五个方法,分别是:(主要的是pr […]...

  7. 一夜搞懂 | JVM 线程安全与锁优化

    并发编程的目的是为了让程序运行得更快,提高程序的响应速度,虽然我们希望通过多线程执行任务让程序运行得更快,但是 […]...

  8. Spring常用配置

    上篇文章我们简单介绍了Spring的基本配置,算是一个简单的入门,这篇文章我们再一起来看看Spring在使用的 […]...

展开目录

目录导航