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

bfs

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1010
#define maxn 999999
using namespace std;
bool flag;
bool vis[N][N];
int T,n,x,y,nx,ny,t[N][N],dis[N][N];
]={,,,-},yy[]={-,,,};
int read()
{
    ,f=; char ch=getchar();
    ;ch=getchar();}
    +ch-',ch=getchar();
    return x*f;
}
struct Node
{
    int x,y;
}node;
queue<Node>q;
int main()
{
    T=read();
    while(T--)
    {
        while(!q.empty()) q.pop();
        flag=false;n=read();
        ;i<=n;i++)
         ;j<=n;j++)
          t[i][j]=dis[i][j]=maxn,vis[i][j]=;
        ;i<=n*-;i++)
         x=read(),y=read(),t[x][y]=i;
        node.x=,node.y=;q.push(node);
        dis[][]=;vis[][]=;
        while(!q.empty())
        {
            Node p=q.front();q.pop();
            if(p.x==n&&p.y==n) {flag=true;break;}
            ;i<;i++)
            {
                nx=p.x+xx[i],ny=p.y+yy[i];
                ||ny<||nx>n||ny>n) continue;
                if(t[nx][ny]<dis[p.x][p.y]||vis[nx][ny]) continue;
                dis[nx][ny]=min(dis[nx][ny],dis[p.x][p.y]+);
                node.x=nx,node.y=ny;
                vis[nx][ny]=true;q.push(node);
            }
        }
        if(flag) printf("Yes\n");
        else printf("No\n");
    }
    ;
}

              

                      距 NOIp2017 还剩 16 天

                        你可以做的事情还有很多,即使到最后一秒也不要放弃,因为不到结束的那一刻谁也不知道结果会怎样

最新文章

  1. coreseek常见错误原因及解决方法
  2. 使用SQL Server存储ASP.NET Session变量
  3. 实现LoadRunner多个场景的顺序执行
  4. Linux多线程的一个小例子
  5. 我是如何学习NodeJs
  6. WPF 设置WebBrowser控件不弹脚本错误提示框
  7. 201521123053《Java程序设计》第十一周学习总结
  8. iOS常见的几种加密方法(base64.MD5.Token传值.系统指纹验证。。加密)
  9. C#密封类和密封方法--C#基础
  10. machine learning 之 Neural Network 1
  11. 如何解决在ie下,Echarts多次使用setOption更改数据时,数据错乱问题
  12. 通过微信公众号API复制公众号自定义菜单同时增加子菜单方法
  13. Spring 与 SpringMVC (或许不完整)
  14. Linux就该这么学(3)-管道符、重定向与环境变量(学习笔记)
  15. scanf连续输入字符,中间不要忘记\n
  16. Hangfire Net Core2
  17. C#-MVC开发微信应用(8)--菜单管理的实现
  18. sass和scss相关知识
  19. Logback 学习笔记
  20. JavaScript 去字符串空格

热门文章

  1. python-压缩解压
  2. 基于eclipse+maven创建web工程
  3. sqlserver 汉字转拼音 首写字母 索引 函数
  4. aFlex脚本入门
  5. [洛谷P1501][国家集训队]Tree II
  6. 树(tree)
  7. 导入android源码中的APP源码到eclipse
  8. vue的过渡效果
  9. CI的model层的操作
  10. java设计模式--解决单例设计模式中懒汉式线程安全问题