1102: [POI2007]山峰和山谷Grz

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 755  Solved: 390
[Submit][Status][Discuss]

Description

  FGD小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷。为了能够让他对他的旅程有一个安排,他想知道山峰和山谷的数量。给定一个地图,为FGD想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的。若两个格子有公共顶点,那么他们就是相邻的格子。(所以与(i,j)相邻的格子有(i?1, j?1),(i?1
,j),(i?1,j+1),(i,j?1),(i,j+1),(i+1,j?1),(i+1,j),(i+1,j+1))。我们定义一个格子的集合S为山峰(山谷)当且仅当:1.S的所有格子都有相同的高度。2.S的所有格子都联通3.对于s属于S,与s相邻的s’不属于S。都有ws > ws’(山峰),或者ws < ws’(山谷)。你的任务是,对于给定的地图,求出山峰和山谷的数量,如果所有格子都有相同的高度,那么整个地图即是山峰,又是山谷。

Input

  第一行包含一个正整数n,表示地图的大小(1<=n<=1000)。接下来一个n*n的矩阵,表示地图上每个格子的高度。(0<=w<=1000000000)

Output

  应包含两个数,分别表示山峰和山谷的数量。

Sample Input

输入样例1
5
8 8 8 7 7
7 7 8 8 7
7 7 7 7 7
7 8 8 7 8
7 8 8 8 8
输入样例2
5
5 7 8 3 1
5 5 7 6 6
6 6 6 2 8
5 7 2 5 8
7 1 0 1 7

Sample Output

输出样例1
2 1
输出样例2
3 3

HINT

Source

[Submit][Status][Discuss]

【题解】【BFS】

【直接BFS,每次从一个点出发,向外BFS,只能将与当前点的权值相同的点加入队列,如果遇到与之不同的点,那么就判断它和当前点的大小关系,如果当前权值的周围既有比它大的,也有比它小的,那么这一块区域就既不是山峰也不是山谷。】

【注:不能当判断出当前块既不是山峰也不是山谷就退出,因为属于这一块的区间可能还没有找全。遍历过的点就不再便利了】

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{int hang,line,val;
};
int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int ch[1010][1010],n,top,under;
bool vis[1010][1010];
int main()
{
//  freopen("int.txt","r",stdin);
//  freopen("my.txt","w",stdout);int i,j;scanf("%d",&n);for(i=1;i<=n;++i)for(j=1;j<=n;++j)scanf("%d",&ch[i][j]);for(i=1;i<=n;++i)for(j=1;j<=n;++j)if(!vis[i][j]){queue<node>que;node a; a.hang=i; a.line=j; a.val=ch[i][j];int up=0,down=0; vis[i][j]=1; que.push(a);while(!que.empty()){node u=que.front(); que.pop();int x=u.hang,y=u.line,v=u.val;for(int k=0;k<8;++k){int xx=x+d[k][0],yy=y+d[k][1];if(xx>0&&xx<=n&&yy>0&&yy<=n){if(!vis[xx][yy]&&ch[xx][yy]==v){node b; b.hang=xx; b.line=yy; b.val=v;que.push(b); vis[xx][yy]=1;}if(ch[xx][yy]<v) down++;if(ch[xx][yy]>v) up++;}}}if(up&&down) continue;else if(up&&!down) under++;else if(!up&&down) top++;}if(!under&&!top) printf("1 1\n");else printf("%d %d\n",top,under);return 0;
}

转载于:https://www.cnblogs.com/lris-searching/p/9402997.html

【bzoj 1102】[POI2007]山峰和山谷Grz(BFS)相关推荐

  1. 山峰和山谷 Ridges and Valleys(bfs)

    山峰和山谷 Ridges and Valleys 题意 水平竖直和斜方向是一个点数值的比较对象,一共八个.相同的的高度可以连接在一起,形成山谷.山峰或者啥都不是.如果对于一个连接在一起的一块地方,其任 ...

  2. BFS——山峰与山谷

    山峰与山谷 所有相邻且高度相等的点为一个连通块,判定每个连通块分别是否为山峰山谷即可. #include<bits/stdc++.h> using namespace std; #defi ...

  3. 山峰和山谷(信息学奥赛一本通-T1454)

    [题目描述] 给定一个 n×n 的网格状地图,每个方格 (i,j)有一个高度 wij​​ .如果两个方格有公共顶点,则它们是相邻的. 定义山峰和山谷如下: 均由地图上的一个连通块组成: 所有方格高度都 ...

  4. 【ybt高效进阶1-5-2】【luogu P3456】山峰和山谷 / GRZ-Ridges and Valleys

    山峰和山谷 / GRZ-Ridges and Valleys 题目链接:ybt高效进阶1-5-2 / luogu P3456 题目大意 对于山谷和山峰,我们这样定义: 它们是一个连通块(其中的高度都相 ...

  5. 1454:山峰和山谷

    1454:山峰和山谷 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 93     通过数: 28 [题目描述] 给定一个 n×n 的网格状地图,每个方格 (i,j ...

  6. 算法提高课-搜索-Flood fill算法-AcWing 1106. 山峰和山谷:flood fill、bfs

    题目分析 来源:acwing 分析:这道题还是flood fill算法的应用,不同点在于八个方向扫描,习惯性采用二重循环来扫描周围的8个方向:其次,这里需要统计周围比它高的和比它矮的,这点用bool变 ...

  7. 【POI 2007】Ridges and Valleys山峰和山谷(GRZ)

    http://www.zybbs.org/JudgeOnline/problem.php?id=1102 八中题目描述太DT了--还是看这里: http://main.edu.pl/en/archiv ...

  8. [BZOJ 1098] [POI2007] 办公楼biu 【链表优化BFS】

    题目链接:BZOJ - 1098 题目分析 只有两个点之间有边的时候它们才能在不同的楼内,那么就是说如果两个点之间没有边它们就一定在同一座楼内. 那么要求的就是求原图的补图的连通块. 然而原图的补图的 ...

  9. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)

    BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...

  10. BZOJ 1101: [POI2007]Zap

    题目 1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MB Description FGD正在破解一段密码,他需要回答很多类似的问题: ...

最新文章

  1. 深入理解计算机系统-之-内存寻址(四)--linux中分段机制的实现方式
  2. python医学科研中能做什么-一个博士生接受怎样的训练是完整、全面的科研训练?...
  3. hdu2235 机器人的容器
  4. c# js popup_c#一个popup问题 :Button_Click_send中如何取得textbox1的内容啊
  5. OpenCASCADE绘制测试线束:简单的向量代数和测量之矢量代数命令
  6. android DecorView的使用
  7. java生成首字母拼音简码的总结
  8. .net千万级数据导出_记一次解决docker下oracle数据库故障事例
  9. oracle什么是重复组,规范化:“重复组”是什么意思?
  10. SAP License:我对SAP项目实施是这样理解的
  11. 升级VS2019后调试出现“表达式计算器中发生内部错误”
  12. Python]网络爬虫
  13. python下载的库包放_python下载的库包存放路径
  14. 芝麻授权 java调用_手机浏览器怎么调用支付宝进行用户授权呢?
  15. 脉歌蓝牙耳机线评测_感受蓝牙5.0带来的震撼——脉歌T1000Pro蓝牙耳机轻体验
  16. Chrome 75 lazy-loading
  17. 大盘为何回血以及盐湖股份和科达制造
  18. 华为fusion computer虚拟机存储数据恢复
  19. 基于casbin的ABAC/RBAC权限实践
  20. TeXworks 高效使用指南

热门文章

  1. python开源聊天框架_转载:15个最受欢迎的Python开源框架-阿里云开发者社区
  2. python自动获取北京时间_python实现定时同步本机与北京时间的方法
  3. 设计模式---适配器模式(C++实现)
  4. Mac使用VMware、Ubuntu安装配置虚拟机Linux
  5. 改完计算机名自动重启 vbs,ghost后自动修改IP和计算机名的VBS脚本
  6. python语言程序设计实践教程陈东_《Python程序设计》(陈春晖)【摘要 书评 试读】- 京东图书...
  7. bootstrap4 左侧导航栏 优秀 大气_Bootstrap4从入门到精通视频教程
  8. 2.5配置自定义HttpMessageConverters
  9. Spring之获得Bean本身的id
  10. 【渝粤教育】电大中专Office办公软件 (5)作业 题库