问题描述

  小明在玩一个电脑游戏,游戏在一个n×m的方格图上进行,小明控制的角色开始的时候站在第一行第一列,目标是前往第n行第m列。
  方格图上有一些方格是始终安全的,有一些在一段时间是危险的,如果小明控制的角色到达一个方格的时候方格是危险的,则小明输掉了游戏,如果小明的角色到达了第n行第m列,则小明过关。第一行第一列和第n行第m列永远都是安全的。
  每个单位时间,小明的角色必须向上下左右四个方向相邻的方格中的一个移动一格。
  经过很多次尝试,小明掌握了方格图的安全和危险的规律:每一个方格出现危险的时间一定是连续的。并且,小明还掌握了每个方格在哪段时间是危险的。
  现在,小明想知道,自己最快经过几个时间单位可以达到第n行第m列过关。

输入格式

  输入的第一行包含三个整数n, m, t,用一个空格分隔,表示方格图的行数n、列数m,以及方格图中有危险的方格数量。
  接下来t行,每行4个整数r, c, a, b,表示第r行第c列的方格在第a个时刻到第b个时刻之间是危险的,包括a和b。游戏开始时的时刻为0。输入数据保证r和c不同时为1,而且当r为n时c不为m。一个方格只有一段时间是危险的(或者说不会出现两行拥有相同的r和c)。

输出格式

  输出一个整数,表示小明最快经过几个时间单位可以过关。输入数据保证小明一定可以过关。

样例输入

3 3 3
2 1 1 1
1 3 2 10
2 2 2 10

样例输出

6

样例说明

  第2行第1列时刻1是危险的,因此第一步必须走到第1行第2列。
  第二步可以走到第1行第1列,第三步走到第2行第1列,后面经过第3行第1列、第3行第2列到达第3行第3列。

评测用例规模与约定

  前30%的评测用例满足:0 < n, m ≤ 10,0 ≤ t < 99。
  所有评测用例满足:0 < n, m ≤ 100,0 ≤ t < 9999,1 ≤ r ≤ n,1 ≤ c ≤ m,0 ≤ a ≤ b ≤ 100。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int N=100+10;
const int M=100+10;
const int T=300+10; //最大可能的时间
const int dx[]={0,0,-1,1};
const int dy[]={-1,1,0,0};
struct node
{int x,y,t;node(int a,int b,int c){x=a;y=b;t=c;}
};
bool d[N][M][T];
int l[N][M],r[N][M];
int n,m,k;
int bfs()
{queue<node> q;q.push(node(1,1,0));d[1][1][0]=true;while(!q.empty()){node u=q.front();q.pop();int ux=u.x,uy=u.y,ut=u.t;for(int i=0;i<4;i++){int nx=ux+dx[i],ny=uy+dy[i],nt=u.t+1;if(nx>n||nx<=0||ny>m||ny<=0||d[nx][ny][nt]) continue;if(nt<=r[nx][ny]&&nt>=l[nx][ny]) continue;if(nx==n&&ny==m) return nt;q.push(node(nx,ny,nt));d[nx][ny][nt]=true;}}return -1;
}
int main()
{int a,b;memset(d,false,sizeof(d));memset(l,-1,sizeof(l));memset(r,-1,sizeof(r));scanf("%d%d%d",&n,&m,&k);for(int i=0;i<k;i++){scanf("%d%d",&a,&b);scanf("%d%d",&l[a][b],&r[a][b]);}printf("%d\n",bfs());return 0;
}

CCF系列题解--2016年4月第四题 方格游戏相关推荐

  1. CCF系列题解--2016年9月第四题 交通规划

    问题描述 G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统. 建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成高速铁路. ...

  2. CCF系列题解--2016年12月第三题 权限查询

    问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个模块的操作权限. 本题中的授权机制是这样设计的:每位用户具有若干角色,每种角色具有若 ...

  3. CCF系列题解--2013年12月第四题 有趣的数字

    问题描述 我们把一个数称为有趣的,当且仅当:        1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次.        2. 所有的0都出现在所有的1之前,而所有的2都出现 ...

  4. CCF系列题解--2016年9月第二题 火车购票

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

  5. CCF系列题解--2015年3月第三题 节日

    问题描述 有一类节日的日期并不是固定的,而是以"a月的第b个星期c"的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日. 现在,给你a,b,c和y1, y2(1850 ≤ ...

  6. CCF系列题解--2018年3月第三题 URL映射

    问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件.对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 ...

  7. CCF系列题解--2015年12月第三题 ASCII字符画

    问题描述 用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术.例如,下图是用 ASCII 字符画出来的 CSPRO 字样. ..____.____..____. ...

  8. CCF系列题解--2017年12月第三题 Crontab

    样例输入 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * Sat,Sun go_to_bed 15 12,18 * * * hav ...

  9. CCF系列题解--2015年12月第二题 棋类消除

    问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...

最新文章

  1. 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
  2. C++ string类型与数值型变量的相互转换
  3. 微服务架构 — 服务治理 — 服务限流、服务降级、服务熔断
  4. linux学习笔记(5)
  5. 从贝叶斯理论到马尔可夫随机场(MRF)--以图像分割为例
  6. java通用异常_Java常用异常整理
  7. 颠覆世界的新技术:区块链
  8. IIR型高斯滤波的原理及实现
  9. java课程讲解,Java基础教程详解:多线程(1)-----多线程概念
  10. Rails开发细节《六》ActiveRecord Validationa and Callbacks验证和回调
  11. 当要写验证性的代码时,利用git进行代码管理
  12. C语言入门1(devC的安装)
  13. uniapp好用项目和插件总结
  14. html页面会出现浏览器崩溃,电脑出现页面崩溃怎么解决
  15. 安全牛--kali学习笔记
  16. 计算机科学与技术军训,计算机科学与技术学院召开2018级新生军训动员大会
  17. 仓储系统之入库、出库理解浅谈
  18. C语言求一元二次方程根
  19. 谷歌浏览器(Google Chrome)清除密码等缓存记录
  20. Matlab中值滤波

热门文章

  1. 颐和园终于上CSDN头条了
  2. (附源码)springboot计算机专业大学生就业指南 毕业设计 061355
  3. 微信PC版重大更新!这下上班摸鱼更方便了!(后台领取内测更新包)
  4. 易智瑞与Esri北京研发中心的实质区别
  5. WebRTC与SIP
  6. 十万个怎么办 - 外企HR支招 (摘自 开复学生网)
  7. lte 在网络覆盖方面应该注意哪些问题_TD-LTE网络深度覆盖解决方法分析
  8. 上海电力学院计算机毕设查重,上海电力学院全日制本科生毕业设计(论文)学术不端行为检测管理办法...
  9. Android多平台Push推送服务集成组件化实践
  10. Java基础之——Java 线程