博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1102: [POI2007]山峰和山谷Grz【BFS】
阅读量:5265 次
发布时间:2019-06-14

本文共 1615 字,大约阅读时间需要 5 分钟。

1102: [POI2007]山峰和山谷Grz

【题目描述】

【解题报告】

这题很水,按照高度排序,BFS一下就可以了。

代码如下

#include
#include
#include
#include
#include
#include
#define Par pair
using namespace std;const int f[8][2]={ { 1,-1},{ 1,0},{ 1,1},{ 0,-1},{ 0,1},{-1,1},{-1,0},{-1,-1}};int n,mp[1005][1005],Ans1,Ans2;bool vis[1005][1005];queue
que;struct xcw{ int x,y,w; bool operator<(const xcw b)const{ return w
n||y<1||y>n) return 0; return !vis[x][y];}void BFS_UP(int x,int y){ que.push(make_pair(x,y));vis[x][y]=1; while(!que.empty()){ x=que.front().first,y=que.front().second;que.pop(); for(int i=0;i<8;i++) if(check(x+f[i][0],y+f[i][1])&&mp[x][y]<=mp[x+f[i][0]][y+f[i][1]]){ vis[x+f[i][0]][y+f[i][1]]=1; que.push(make_pair(x+f[i][0],y+f[i][1])); } }}void BFS_DOWN(int x,int y){ que.push(make_pair(x,y));vis[x][y]=1; while(!que.empty()){ x=que.front().first,y=que.front().second;que.pop(); for(int i=0;i<8;i++) if(check(x+f[i][0],y+f[i][1])&&mp[x][y]>=mp[x+f[i][0]][y+f[i][1]]){ vis[x+f[i][0]][y+f[i][1]]=1; que.push(make_pair(x+f[i][0],y+f[i][1])); } }}int main(){ #ifndef ONLINE_JUDGE freopen("prob.in","r",stdin); freopen("prob.out","w",stdout); #endif n=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mp[i][j]=read(),a[(i-1)*n+j]=(xcw){i,j,mp[i][j]}; sort(a+1,a+1+n*n); for(int i=1;i<=n*n;i++) if(!vis[a[i].x][a[i].y]) BFS_UP(a[i].x,a[i].y),Ans1++; memset(vis,0,sizeof(vis)); for(int i=n*n;i;i--) if(!vis[a[i].x][a[i].y]) BFS_DOWN(a[i].x,a[i].y),Ans2++; printf("%d %d\n",Ans2,Ans1); return 0;}

转载于:https://www.cnblogs.com/XSamsara/p/9064388.html

你可能感兴趣的文章
awk 统计
查看>>
CSS min-height 属性
查看>>
SDN第一次作业
查看>>
模板设计模式的应用
查看>>
【井字游戏】做一款回忆童年的游戏
查看>>
高性能的异步爬虫
查看>>
数据结构(二):栈
查看>>
实训第五天
查看>>
平台维护流程
查看>>
SQL (FMDB)
查看>>
2012暑期川西旅游之总结
查看>>
Linux发行版的排行
查看>>
宾得镜头大全与发展史
查看>>
spread+wackamole打造全新高可用+负载均衡
查看>>
Xcode 快捷键及代码格式化
查看>>
12010 解密QQ号(队列)
查看>>
Docker简明教程(以安装wget程序为例)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
daydayup2 codeforces143C
查看>>