洛谷P3395-路障(BFS)

简介: 洛谷P3395-路障(BFS)

题目背景:


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


题目描述:


B君站在一个n×nn\times nn×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)


样例输入:


2

2

1 1

2 2

5

3 3

3 2

3 1

1 2

1 3

1 4

1 5

2 2


样例输出:


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


AC Code:


#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 2020
int n,k,map[N][N],a[N],b[N];//map数组是地图,a和b数组是障碍坐标 
bool vis[N][N],flag;//vis是标记数组,flag标记变量记录是否能走到(n,n) 
int dx[]={0,0,1,-1};//两个方向数组 
int dy[]={1,-1,0,0};
struct node {
  int x,y,t;
};
queue<node> q;//这里采用C++ STL的队列 
bool judge(int x,int y) {
  //不越界 and 这个点不是障碍物 and这个点没有走过 
  if(x>=1&&x<=n&&y>=1&&y<=n&&map[x][y]==0&&vis[x][y]==false) {
    return true;
  }
  return false;
}
void bfs(int x,int y,int t) {
  node now,next;
  now.x=x;
  now.y=y;
  now.t=t;
  q.push(now);//起点入队 
  while(!q.empty()) {//循环保证队列不为空 
    now=q.front();//取出队首元素 
    q.pop();//弹出队首 
    if(now.x==n&&now.y==n) {//走到(n,n) 
      flag=true;//flag修改为true 
      return ;//直接返回 
    }
    //在那一秒结束后,(x,y)将被摆上路障,所以这里应该是相应的时间-1 
    map[a[now.t-1]][b[now.t-1]]=1;
    for(int i=0;i<4;i++) {//四个方向搜索 
      int tx=now.x+dx[i];
      int ty=now.y+dy[i];
      if(judge(tx,ty)) {//合法判断 
        vis[tx][ty]=true;//标记该点 
        next.x=tx;
        next.y=ty;
        next.t=now.t+1;//时间+1 
        q.push(next);//入队 
      }
    }
  }
}
int main() {
  scanf("%d",&k);
  while(k--) {
    scanf("%d",&n);
    for(int i=1;i<=2*n-2;i++) {
      scanf("%d %d",&a[i],&b[i]);
    }
    flag=false;
    memset(vis,false,sizeof(vis));//标记数组清零 
    memset(map,0,sizeof(map));//地图全部初始化为0 
    vis[1][1]=true;//标记起点 
    bfs(1,1,0);
    if(flag) {//到达(n,n) 
      printf("Yes\n"); 
    }else {//无法到达 
      printf("No\n");
    }
  }
  return 0;
}



相关文章
markdown常用语法--花括号(超详细)
markdown常用语法--花括号(超详细)
|
算法 安全 数据挖掘
如何更轻松地学习差分隐私——《动手学差分隐私》中文版正式发布!
2022年10月28日,阿里巴巴集团数据技术及产品部DataTrust团队成员刘巍然、李双为差分隐私在线书籍《动手学差分隐私(Programming Differential Privacy )》提供的中文翻译版本正式被原著作者Joseph P. Near和Chiké Abuah合并到书籍GitHub仓库(https://github.com/uvm-plaid/programming-dp/)中
2732 0
如何更轻松地学习差分隐私——《动手学差分隐私》中文版正式发布!
|
10月前
|
边缘计算 容灾 网络性能优化
算力流动的基石:边缘网络产品技术升级与实践探索
本文介绍了边缘网络产品技术的升级与实践探索,由阿里云专家分享。内容涵盖三大方面:1) 云编一体的混合组网方案,通过边缘节点实现广泛覆盖和高效连接;2) 基于边缘基础设施特点构建一网多态的边缘网络平台,提供多种业务形态的统一技术支持;3) 以软硬一体的边缘网关技术实现多类型业务网络平面统一,确保不同网络间的互联互通。边缘网络已实现全球覆盖、差异化连接及云边互联,支持即开即用和云网一体,满足各行业需求。
333 4
|
5月前
|
人工智能 IDE 开发工具
|
6月前
|
机器学习/深度学习 PyTorch 编译器
深入解析torch.compile:提升PyTorch模型性能、高效解决常见问题
PyTorch 2.0推出的`torch.compile`功能为深度学习模型带来了显著的性能优化能力。本文从实用角度出发,详细介绍了`torch.compile`的核心技巧与应用场景,涵盖模型复杂度评估、可编译组件分析、系统化调试策略及性能优化高级技巧等内容。通过解决图断裂、重编译频繁等问题,并结合分布式训练和NCCL通信优化,开发者可以有效提升日常开发效率与模型性能。文章为PyTorch用户提供了全面的指导,助力充分挖掘`torch.compile`的潜力。
751 17
|
10月前
|
缓存 算法 物联网
【论文专辑】2024年大模型推理优化论文精选第六期
本文整理了 OSDI 2024 和 SOSP 2024 中与大语言模型(LLM)推理优化相关的10篇论文,涵盖 Parrot、ServerlessLLM、dLoRA 等系统,提出的技术如 Chunked Prefill、Prefix-Caching、P/D分离等已被 vLLM 和 TensorRT-LLM 等主流推理引擎采用。这些研究解决了 LLM 推理中的冷启动延迟、资源分配、KV 缓存管理等问题,提升了推理性能和资源利用率。CodeFuse推理优化项目地址https://github.com/codefuse-ai/EasyDeploy
1249 2
|
人工智能 自然语言处理 PyTorch
基于openi平台免费华为昇腾910B芯片部署qwen2.5 Instruct 14B大模型
基于OpenI平台和华为昇腾910B芯片,本方案详细介绍了如何免费部署Qwen-2.5 Instruct 14B大模型。涵盖准备工作、模型适配、部署步骤及性能优化等内容,适用于NLP任务部署、本地化适配及实时服务化等多种应用场景。
3549 1
|
机器学习/深度学习 数据采集 数据可视化
如何理解数据分析及数据的预处理,分析建模,可视化
如何理解数据分析及数据的预处理,分析建模,可视化
346 0
|
设计模式 移动开发 Java
【阿里规约】阿里开发手册解读——代码格式篇
本文所有代码格式规范遵循《阿里规约》,从编码、换行符、空格规则、括号规则、字符数等方面展开,详细阐述方法参数、强制转换、运算符、缩进等元素的编写规范。
【阿里规约】阿里开发手册解读——代码格式篇
|
存储 安全 Java
阿里开发手册 嵩山版-编程规约 (六)集合处理
《阿里开发手册 嵩山版》Java编程中的集合处理规范和最佳实践,旨在提升代码质量和开发效率。