zoukankan      html  css  js  c++  java
  • 洛谷 P3395 路障

    P3395 路障

    题目背景

    此题约为NOIP提高组Day1T1难度。

    题目描述

    B君站在一个n*n的棋盘上。最开始,B君站在(1,1)这个点,他要走到(n,n)这个点。

    B君每秒可以向上下左右的某个方向移动一格,但是很不妙,C君打算阻止B君的计划。

    每秒结束的时刻,C君会在(x,y)上摆一个路障。B君不能走在路障上。

    B君拿到了C君准备在哪些点放置路障。所以现在你需要判断,B君能否成功走到(n,n)

    保证不会走到某处,然后被一个路障砸死。

    输入输出格式

    输入格式:

    首先是一个正整数T,表示数据组数。

    对于每一组数据:

    第一行,一个正整数n

    接下来2n-2行,每行两个正整数xy,意义是在那一秒结束后,(x,y)将被摆上路障。

    输出格式:

    对于每一组数据,输出YesNo,回答B君能否走到(n,n)

    输入输出样例

    输入样例#1:
    2
    
    2
    1 1
    2 2
    
    5
    3 3
    3 2
    3 1
    1 2
    1 3
    1 4
    1 5
    2 2
    输出样例#1:
    Yes
    Yes

    说明

    样例解释:

    以下0表示能走,x表示不能走,B表示B君现在的位置。从左往右表示时间。

    Case 1:
    0 0    0 0    0 B  (已经走到了)
    B 0    x B    x 0 
    Case 2:
    0 0 0 0 0    0 0 0 0 0    0 0 0 0 0    0 0 0 0 0
    0 0 0 0 0    0 0 0 0 0    0 0 0 0 0    0 0 0 0 0
    0 0 0 0 0    0 0 x 0 0    0 0 x 0 0    0 0 x 0 0
    0 0 0 0 0    0 0 0 0 0    0 0 x 0 0    0 0 x 0 0
    B 0 0 0 0    0 B 0 0 0    0 0 B 0 0    0 0 x B 0 ......(B君可以走到终点)

    数据规模:

    防止骗分,数据保证全部手造。

    对于20%的数据,有n<=3

    对于60%的数据,有n<=500

    对于100%的数据,有n<=1000

    对于100%的数据,有T<=10

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int T,n;
    int f[30000],k[30000];
    bool a[1001][1001],b[1001][1001];
    void bfs(int x,int y,int t)
    {
        if (t<=2*n-2) 
            b[f[t]][k[t]]=1;
        if (x+1<=n && b[x+1][y]==0 && a[x+1][y]==0) 
        {    a[x+1][y]=1;
            bfs(x+1,y,t+1);
        }
        if (x-1>=1&&b[x-1][y]==0&&a[x-1][y]==0) 
        {
            a[x-1][y]=1;
            bfs(x-1,y,t+1);
        }
        if (y+1<=n&&b[x][y+1]==0&&a[x][y+1]==0) 
        {
            a[x][y+1]=1;
            bfs(x,y+1,t+1);
        }
        if (y-1>=1&&b[x][y-1]==0&&a[x][y-1]==0) 
        {
            a[x][y-1]=1;
            bfs(x,y-1,t+1);
        }
    }
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            cin>>n;
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            memset(f,0,sizeof(f));
            memset(k,0,sizeof(k));
            for (int i=1;i<=2*n-2;i++)
                scanf("%d%d",&f[i],&k[i]);
            a[1][1]=1;
            bfs(1,1,0);
            if (a[n][n])
                printf("YES
    ");
            else
                printf("NO
    ");
        }
    }
  • 相关阅读:
    FortiGate 硬件加速
    RSA modulus too small: 512 < minimum 768 bits
    VMXNET3 vs E1000E and E1000
    BZOJ 1432: [ZJOI2009]Function(新生必做的水题)
    BZOJ 2456: mode(新生必做的水题)
    BZOJ 1968: [Ahoi2005]COMMON 约数研究(新生必做的水题)
    BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
    海量数据处理算法总结【超详解】
    POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
    图的存储结构之邻接表(详解)
  • 原文地址:https://www.cnblogs.com/xiaoqi7/p/5910907.html
Copyright © 2011-2022 走看看