• 洛谷—— P3395 路障


    https://www.luogu.org/problem/show?pid=3395

    题目背景

    此题约为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

    BFS

     1 #include <cstring>
     2 #include <cstdio>
     3 #include <queue>
     4 
     5 #define min(a,b) (a<b?a:b)
     6 
     7 inline void read(int &x)
     8 {
     9     x=0; register char ch=getchar();
    10     for(; ch>'9'||ch<'0'; ) ch=getchar();
    11     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
    12 }
    13 const int N(1005);
    14 int n,tim[N][N];
    15 struct Node {
    16     int x,y,t;
    17 }u,v;
    18 std::queue<Node>que;
    19 int fx[4]={0,1,0,-1};
    20 int fy[4]={1,0,-1,0};
    21 bool vis[N][N];
    22 
    23 int Presist()
    24 {
    25     int t; read(t);
    26     for(bool flag; t--; )
    27     {
    28         read(n); flag=0;
    29         for(int i=1; i<=n; ++i)
    30           for(int j=1; j<=n; ++j)
    31             tim[i][j]=0x3f3f3f3f;
    32         for(int x,y,i=1; i<=n-1<<1; ++i)
    33             read(x),read(y),tim[x][y]=min(i,tim[x][y]);
    34         for(; !que.empty(); ) que.pop();
    35         memset(vis,0,sizeof(vis));
    36         u.x=u.y=1; u.t=0;
    37         vis[1][1]=1; que.push(u);
    38         for(; !que.empty(); )
    39         {
    40             u=que.front(); que.pop();
    41             if(u.x==n&&u.y==n) {flag=1;break;}
    42             for(int i=0; i<4; ++i)
    43             {
    44                 v.x=u.x+fx[i],v.y=u.y+fy[i],v.t=u.t+1;
    45                 if(v.x<1||v.y<1||v.x>n||v.y>n) continue;
    46                 if(v.t>tim[v.x][v.y]||vis[v.x][v.y]) continue;
    47                 vis[v.x][v.y]=1; que.push(v);
    48             }
    49         }
    50         if(flag) puts("Yes"); else puts("No");
    51     }
    52     return 0;
    53 }
    54 
    55 int Aptal=Presist();
    56 int main(int argc,char**argv){;}
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    线程每隔5秒监控一次系统时间
    Struts2框架运行流程及案例
    list转为json
    Workbook读取Excel数据
    testng 接口测试,读取Excel表格数据,做数据驱动2(读取某些固定列数据)
    解析json数据,将json转为实体类
    通过maven命令将jar包放入本地仓库下
    遍历 Object[] [] 数组的值
    testng 接口测试,读取Excel表格数据,做数据驱动1(按照顺序读取Excel数据)
    解析json数据,将json转为Map
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7728947.html
Copyright © 2020-2023  润新知