题意

棋盘每个数字表示高度,四周高中间低为山谷,反之为山峰,要求统计山峰和山谷的数量

思路

枚举每个点,对每个点进行对8个方向跑bfs,判断该方块周围的高度情况。

代码

#include<iostream>
#include<cmath>
#include<stack>
#include<map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>#define Endl "\n"
typedef long long ll;
const int maxn=1e3+5;
const int mod=1e9+7;
using namespace std;
int a[maxn][maxn];
int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int n,ans1=0,ans2=0,high=0,low=0;
bool p[1005][1005];
struct location{int x;int y;int height;
};void bfs(int x,int y,int height)
{queue<location> q;location begin;begin.x=x;begin.y=y;begin.height=height;q.push(begin);   while(!q.empty()){location temp;temp = q.front();q.pop();int xx=temp.x;int yy=temp.y;int key=temp.height;
//      cout<<"------------"<<Endl;for(int i=0;i<8;i++){
//          cout<<"i="<<i<<Endl;int nx = xx+dir[i][0];int ny = yy+dir[i][1];
//          cout<<"dir"<<dir[0][i]<<" "<<dir[1][i]<<Endl;
//          cout<<"nx="<<nx<<" "<<"ny="<<ny<<Endl;if(nx>=0&&nx<n&&ny>=0&&ny<n){if(!p[nx][ny]&&a[nx][ny]==key){location m;m.x=nx;m.y=ny;m.height=key;q.push(m);p[nx][ny]=1;}if(a[nx][ny]<key) low++;if(a[nx][ny]>key) high++;//            cout<<low<<" "<<high<<Endl;}  }// cout<<"------------"<<Endl;}
}int main()
{cin>>n;for(int i=0;i<n;i++)for(int j=0;j<n;j++){cin>>a[i][j];p[i][j]=0;}for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(!p[i][j]){high = 0;low = 0; p[i][j]=1;bfs(i,j,a[i][j]);if(high&&low)   continue;elseif(high&&!low) ans1++;elseif(!high&&low) ans2++;}}if(!ans1&&!ans2)cout<<"1 1"<<Endl;else cout<<ans2<<" "<<ans1<<Endl;return 0;
}

【搜索】训练题J-山峰和山谷 Ridges and Valleys相关推荐

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

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

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

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

  3. 模拟算法考试训练题和答案1

    模拟算法考试训练题和答案1 前三个问题应该会刷新你的记忆,最后三个问题需要一些思考.回顾命题的基础逻辑你可以阅读 Moller 和 Struth 书中的温和介绍. 热身任务:在互联网上搜索您最喜欢的计 ...

  4. 湖北c语言二级考试真题,湖北省C语言二级考试训练题.ppt

    <湖北省C语言二级考试训练题.ppt>由会员分享,可在线阅读,更多相关<湖北省C语言二级考试训练题.ppt(48页珍藏版)>请在人人文库网上搜索. 1.湖北省C语言二级考试训练 ...

  5. Tarjan相关最全(附训练题和答案)

    Tarjan相关最全(附训练题和答案) 算法思想 Tarjan 强连通分量 割点 割桥 缩点 Kosaraju Garbow 训练 POJ2186 POJ1236 POJ2375 Luogu P338 ...

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

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

  7. 性是指用户可以与计算机进行人机对话操作,2016年计算机二级单选题训练题库...

    2016年计算机二级单选题训练题库 离2016年3月计算机等级考试还有一周多的时间,在这个强化学习阶段,百分网小编为考生搜索整理了关于计算机二级单选题训练题库,供参考学习,希望对您都有帮助.想了解更多 ...

  8. php锻炼逻辑的问题,锻炼逻辑思维能力的:5道高难度逻辑思维训练题

    原标题:锻炼逻辑思维能力的:5道高难度逻辑思维训练题 下面给大家精选了5道逻辑思维训练题,每一道都会用到一项专门的逻辑思维方法.很多人一读题目就头疼,你能做对几道呢? (逻辑思维能力是我们学习.工作. ...

  9. 上方山骇客协会算法小组训练题(三) 10.31-11.06

    上方山骇客协会算法小组训练题(三) 1.填空题,在题目的最后给出结果即可 题目 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容. 每位球员担 ...

最新文章

  1. python中文件读写位置的作用-Python中文件的读写
  2. Oracle 原理: 集合数组,集合属性,is table of 用法,bulk collect into,IS RECORD用法
  3. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
  4. python list方法操作_Python 列表(List)操作方法详解
  5. C#.NET中的事件2
  6. 写了cookie阻止通过输入地址直接访问下一个html,但是直接输入地址访问时,会闪一下下一个页面,怎么回事啊????、...
  7. 一位质量总监的“发飙”
  8. Tyvj P1016 包装问题 (DP)
  9. 一天一点linux(15):Ubuntu14.04 如何安装字体?
  10. axis2 java demo_axis2 webservice实现
  11. linux令普通用户拥有root权限
  12. linux文件编程(二)
  13. LOTO示波器---1G采样率的USB示波器OSCH02的优势
  14. MATLAB的官方网站上其实有很多MATLAB的学习和使用资料(文档、视频都有不少)
  15. 普通计算机电缆,计算机电缆和普通电缆有什么区别吗?
  16. 《裁梦为魂》 - 银临 :OI版
  17. Anchor Based和Anchor Free的相爱相杀与ATSS的诞生
  18. 请问:怎么实现大文件快速上传?
  19. Sigmoid信念网络(SBN)
  20. 计算机命令cmd,电脑cmd命令大全

热门文章

  1. 坚持写博客以来的感受和改变
  2. 只是一个文件节点类为了项目的数据处理
  3. 众望所归!《觉醒年代》《山海情》成玉兰奖大赢家
  4. androidlib.java_实现 Java SDK 库
  5. 联通数据能力开放平台介绍
  6. 软件构造之抽象相关知识总结
  7. 自己的家用电脑怎么架设传奇私服??
  8. 解密MySQL 8.0 multi-valued indexes
  9. html追加没有样式,html中append追加的表格元素和静态显示的元素样式不同?
  10. WindowManager.LayoutParams.FLAG_DIM_BEHIND