(考试大整理~)迷宫x

(maze.cpp/c/pas)

Description

Karles 和朋友到迷宫玩耍,没想到遇上了 10000000 年一次的大洪水,好在 Karles 是一个喜

欢思考的人,他发现迷宫的地形和洪水有如下性质:

①迷宫可以被看做是一个 N*M 的矩形方阵,其中左上角坐标为(1,1),右下角坐标为(n,m),

每个格子(i,j)都有一个高度 h(i,j)。

②洪水从(sx,sy)开始,如果一个格子被洪水淹没,那这个格子四周比它低(或相同)的格子

也会被淹没。

现在 Karles 想请你帮忙算算,有多少个格子不会被淹没,以及 Karles 想问一下格子(x,y)是否

被淹没,如果被淹没的话就输出”Yes”,否则输出”No”。

Input

第一行包含两个整数 n,m。

以下 n 行,每行 m 个数,第 i 行第 j 个数表示格子高度 h(i,j)。

下面一行包含两个整数 sx,sy,表示最初被洪水淹没的格子。

下面一行包含一个整数 q,表示询问的数量。

最后 q 行每行包含两个整数 x,y,表示询问的格子。

Output

输出的第一行,为永远不会被淹没的格子的数量。

以下 q 行,为格子被淹没的情况,输出”Yes”或者”No”(不包含引号)

Example

maze.in maze.out

3 3

1 2 3

2 3 4

3 4 5

2 2

2

1 2

2 3

5

Yes

No

Hint

对于 10%的数据,(sx,sy)为迷宫内的最高点。

对于 30%的数据,1<=N,M<=5,q=1。

对于 60%的数据,1<=N,M<=100,q<=100。

对于 100%的数据,1<=N,M<=2000,q<=1000。

解题思路:

因为题目的意思为从一个起点开始,

向它的四周扩展,所以开2个数组,

为移动方向,如果找到比它低的,计数器就++;

最终输出总的m*n-计数器的数;

代码如下:


#include<cstdio>

#include<queue>

#define MAXN 2001

using namespace std;

int n,m,tot=1,Q;

int dx[5]={0,1,-1,0,0};//搜索的方向

int dy[5]={0,0,0,1,-1};

bool b[MAXN][MAXN];//记录是否能够被淹没,初始化均为0

int g[MAXN][MAXN],x1,y1;

struct data{int x,y;};

queue<data>q;

void bfs()

{

       data u;

       int x,y;

       b[x1][y1]=true;

       q.push((data){x1,y1});

       while(!q.empty())

       {

              u=q.front();q.pop();

              x=u.x,y=u.y;

              for(int i=1;i<=4;i++)//扩展的四个方向

              {

                     int xx=x+dx[i];

                     int yy=y+dy[i];

                     if(yy>=1&&xx>=1&&g[xx][yy]<=g[x][y]&&!b[xx][yy]&&yy<=m&&xx<=n)

                     {

                            b[xx][yy]=true;//进行标记

                            tot++;

                            q.push((data){xx,yy});

                     }

              }

       }

}

int main()

{

//     freopen("maze.in","r",stdin);

//     freopen("maze.out","w",stdout);

       int x,y;

       scanf("%d %d",&n,&m);

       for(int i=1;i<=n;i++)

         for(int j=1;j<=m;j++)

           scanf("%d",&g[i][j]);

       scanf("%d %d",&x1,&y1);

       bfs();

       printf("%d\n",n*m-tot);//总共的减去被淹没的

       scanf("%d",&Q);

       while(Q--)

       {

              scanf("%d %d",&x,&y);

              if(b[x][y]) printf("Yes\n");

              else printf("No\n");

       }

       //fclose(stdin);fclose(stdout);

       return 0;

}
时间: 2024-10-13 11:33:53

(考试大整理~)迷宫x的相关文章

(考试大整理~)Xxy 的车厢调度x

这一题我以前研究过哈哈哈~ (train.cpp/c/pas) Description 有 一 个 火 车 站 , 铁 路 如 图 所 示 ,每辆火车从 A 驶入, 再从 B 方向驶出,同时它的车厢可以重新组合.假设 从 A 方向驶来的火车有 n 节(n<=1000) ,分别按照顺 序编号为 1,2,3,-,n.假定在进入车站前,每节 车厢之间都不是连着的,并且它们可以自行移动到 B 处的铁轨上. 另外假定车站 C 可以停放任意多节车厢. 但是一旦进入车站 C,它就不能再回到 A 方向的铁轨 上

浙江大学软件学院三维动画与交互技术考试概念整理

第一讲 1.    增强现实技术AR: --融合了三维动画.立体视觉和图像处理: --建模.渲染.位置标定.图像融合: 2.    OpenGL是一种用于创建实时3D图像的编程接口. 3.    三维这个术语表示一个正在描述或显示的物体具有三维维度:宽度.高度.深度: --计算机3D图形实质上也是平面的: --在计算机屏幕上显示的二维图像,提供深度(或第三维)的错觉: 2D+透视 = 3D 透视使人产生深度的错觉. 4.    真正的3D是通过人的两只眼睛观察同一个物体,在视网膜上生成具有视差的

复旦大学数学学院高等代数历届期中考试大题精选(未完待续)

本文收集了从 2009 年至今复旦大学数学学院高等代数历届期中考试精选的大题, 其中有的大题由习题课老师或任课老师自编而来, 有的大题由其他大学的教材或学习指导书中的题目或考研试题改编而来, 也有相当部分的大题已经融入到复旦高等代数学习指导书 (第三版) 中了. 这里我们将不会公布这些精选大题的解答, 但会附加一些注解, 以供读者参考. 本科 16 级高代 I 期中考试 四.(10分)  设 $A=(a_{ij})$ 是 $n$ 阶非零实矩阵, 其中 $n\geq 3$ 为奇数. 设 $A_{i

Java集合大整理

此处为整理,更详细的源码分析请查阅 JDK源码分析其他文章. 为了适应csdn的窗口大小,表格严重变形了... null 值重复 底层实现 扩容 增.删.迭代 包含 备注 HashSet 允许,just 1个 no HashMap 同HashMap [add]:调用HashMap的put方法,put的value传入伪值static final Object PRESENT = new Object(),仅仅为了保持映射关系:(所有value都是同一个对象) [remove]:调map的remov

iOS每日一记------------之 中级完美大整理

iOS.mac开源项目及库汇总 UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefreshControl – XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更

swift 资料大整理(持续更新)

iOS swift开发资源整理 以下是我整理的资源目录,无关顺序. 2015.05.27更新 斯坦福白胡子swift教学视频以及字幕下载 斯坦福白胡子demo下载 apple swift官方博客 swift 基础语法官方文档 swift Using Swift with Cocoa and Objective-c官方文档 apple swift 官方Resource Library The swift Programming language 中文文档 github版本 Code4App 开发时

数论大整理(不定时更新)(虽然是懵着听下来的)x

一.斐波那契数列: 1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 int main() 5 { 6 double a,n,ans; 7 cin>>n; 8 //n--; //(第一项是0时) 9 a=sqrt(5); 10 ans =(a/5) * (pow( (1+a)/2 ,n) - pow((1-a)/2 ,n)); 11 cout<<ans; 12 return 0;

hadoop细节知识题大整理

1.下列有关hdfs的说法正确的是() A.HDFS是分布式计算中数据存储管理的基础,可以运行在多台廉价的商用服务器上 B.HDFS来源于Google2003年10月发表的GFS(Google File System)论文,是GFS的一个克隆版本 C.HDFS具有高容错性,由HDFS内部机制自动保存和恢复多个副本,我们不必关心 D.HDFS支持文件的并发写入和随机修改 正确答案:A,B,C 解析: 为了保证数据的一致性,一个文件只能有一个写,不允许多个线程同时写,不支持文件的随机修改,仅支持数据

考试大肯。

1.在div元素中,包含了一个<span>元素,通过has选择器获取<div>元素中的<span>元素的语法是? 提示使用has() 答:$("div").has("span") 2.在<ul>元素中,添加了多个<li>元素,通过jquery选择器获取最后一个<li>元素的方法是? 答 $("li:last") 3.在页面中有三个<div>元素,采用jQuery中