[BZOJ1102] [POI2007]山峰和山谷Grz
2015-09-27 22:42
381 查看
传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=1102题目大意
给定n*n的点的高度,8连通,相同高度的点周围的点都比它高,那它就是山谷,都比它低就是山峰,询问山峰和山谷数目题解
BFS,floodfill即可注意所有点高度相同,即是山峰又是山谷,都为1
const x:array[1..8]of integer=(0,-1,-1,-1,0,1,1,1); y:array[1..8]of integer=(-1,-1,0,1,1,1,0,-1); var ans,w:array[0..1005,0..1005]of longint; t:array[0..1000005,1..2]of longint; i,j,k:longint; n,ans1,ans2:longint; c,d,xx,yy,head,tail,len,v:longint; procedure dfs(a,b:longint); var i,j,k:longint; begin t[1,1]:=a; t[1,2]:=b; ans[a,b]:=1; head:=1; tail:=2; len:=1; v:=w[a,b]; j:=0; k:=0; len:=1; while head<tail do begin c:=t[head,1]; d:=t[head,2]; inc(head); for i:=1 to 8 do begin xx:=c+x[i]; yy:=d+y[i]; if (xx<1)or(xx>n)or(yy<1)or(yy>n) then continue; if (w[xx,yy]=v)and(ans[xx,yy]=0) then begin inc(len); t[tail,1]:=xx; t[tail,2]:=yy; inc(tail); ans[xx,yy]:=1; end; if w[xx,yy]<v then j:=1; if w[xx,yy]>v then k:=1; end; end; for i:=1 to len do ans[t[i,1],t[i,2]]:=len; if (j=1)and(k=0) then inc(ans1); if (j=0)and(k=1) then inc(ans2); end; begin readln(n); ans1:=0; ans2:=0; for i:=1 to n do begin for j:=1 to n do read(w[i,j]); readln; end; fillchar(ans,sizeof(ans),0); for i:=1 to n do for j:=1 to n do if ans[i,j]=0 then dfs(i,j); v:=w[1,1]; k:=0; for i:=1 to n do for j:=1 to n do if w[i,j]<>v then begin k:=1; break; end; if k=0 then begin ans1:=1; ans2:=1; end; writeln(ans1,' ',ans2); end.
相关文章推荐
- hdu 3001 Travelling (旅行商问题)
- JAVA历史
- 浅析spring IOC操作
- OSX10.10.5配置apache2&php5&VirtualHost
- MongoDB YAML格式的配置文件
- ubuntu 14.04开机出现错误“Error found when loading /root/.profile”解决
- virtual box增强包
- Spark SQL连接数据库找不到Mysql驱动解决方法
- C#反射和特性
- 《重新定义公司:谷歌是如何运营的》比较全面的谷歌公司的管理技巧,五星推荐
- 单向链表的倒序输出(栈实现和递归实现)
- iOS开发系列--通知与消息机制--转
- ACM学习历程—HDU5490 Simple Matrix (数学 && 逆元 && 快速幂) (2015合肥网赛07)
- java连接sql server 2008
- 分布式计算学习先验知识
- GET vs. POST
- 计算机网络 对称加密与非对称加密
- spring配置ehcache
- 第一篇博客-半技术半总结
- [Javascript] An Introduction to JSPM (JavaScript Package Manager)