UVA 572 -- Oil Deposits(DFS求连通块)

  图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块。

  下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常量数组或者写8条DFS调用。

  下述算法是:种子填充(floodfill)

  两种连通区域

  四连通区域:从区域内一点出发,可通过上、下、左、右四个方向的移动组合,在不越出区域的前提下,能到达区域内的任意像素

  八连通区域:从区域内每一像素出发,可通过八个方向,即上、下、左、右、左上、右上、左下、右下移动的组合,在不越出区域的前提下,能到达区域内的任意像素。

  基本原理

  从多边形区域内部的某一像素点(称为种子)开始,由此出发找到区域内的其它所有像素。

  采用的边界定义

  区域边界上所有像素均具有某个特定的颜色值,区域内部所有像素均不取这一特定颜色,而边界外的像素则可具有与边界相同的颜色值。

  算法的执行过程:

  从(x,y)开始,先检测该点的颜色,若它与边界色和填充色均不相同,则用填充色填充该点。然后检测相邻位置,以确定它们是否是边界色和填充色,若不是,则填充该相邻点。直到检测完区域边界范围内的所有像素为止。
   从当前点检测相邻像素的方法:四连通或八连通
   从四个方向寻找下一个像素,称为四向算法(只能填充四连通区域);
   从八个方向寻找下一个像素,称为八向算法(可以填充八连通区域和四连通区域)。

  四连通区域的种子填充递归算法:

 void ZhongZiTC4 (int seedx, int seedy, int fcolor, int bcolor)
{
int current = getpixel (seedx, seedy);
if ((current != bcolor) && (current != fcolor))
{ putpixel (seedx, seedy, fcolor);
ZhongZiTC4 (seedx+, seedy, fcolor, bcolor); //右
ZhongZiTC4 (seedx–, seedy, fcolor, bcolor); //左
ZhongZiTC4 (seedx, seedy+, fcolor, bcolor); //上
ZhongZiTC4 (seedx, seedy–, fcolor, bcolor); //下
}
}

UVA 572代码:

 #include<iostream>
#include<cstring>
using namespace std;
const int maxn = +;
char deposits[maxn][maxn];
int id[maxn][maxn];
int rm,cm;
void dfs(int r,int c,int cnt)
{
///判断是否出界
if(r< || r>=rm || c< || c>=cm) return;
///临界条件
if(deposits[r][c] == '*') return;
if(id[r][c]) return; id[r][c] = cnt;
for(int i=-;i<=;i++)
for(int j=-;j<=;j++)
if(i!= || j!=) dfs(r+i,c+j,cnt); } int main()
{ while(cin>>rm>>cm && rm && cm)
{
for(int i=;i<rm;i++) cin>>deposits[i];
int cnt=;
memset(id,,sizeof(id));
for(int i=;i<rm;i++)
for(int j=;j<cm;j++)
{
if(!id[i][j] && deposits[i][j]=='@')///没有编号
dfs(i,j,++cnt);
}
cout<<cnt<<endl; }
return ;
}

UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)的更多相关文章

  1. HDU1241 Oil Deposits —— DFS求连通块

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...

  2. UVa572 Oil Deposits DFS求连通块

      技巧:遍历8个方向 ; dr <= ; dr++) ; dc <= ; dc++) || dc != ) dfs(r+dr, c+dc, id); 我的解法: #include< ...

  3. UVa 572 油田(DFS求连通块)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. UVa 572 Oil Deposits(DFS)

     Oil Deposits  The GeoSurvComp geologic survey company is responsible for detecting underground oil ...

  5. [uva]AncientMessages象形文字识别 (dfs求连通块)

    非常有趣的一道题目,大意是给你六种符号的16进制文本,让你转化成二进制并识别出来 代码实现上参考了//http://blog.csdn.net/u012139398/article/details/3 ...

  6. UVA 572 Oil Deposits油田(DFS求连通块)

    UVA 572     DFS(floodfill)  用DFS求连通块 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format: ...

  7. [C++]油田(Oil Deposits)-用DFS求连通块

    [本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...

  8. DFS入门之二---DFS求连通块

    用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...

  9. UVA 572 dfs求连通块

    The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...

随机推荐

  1. ES6入门之Proxy

    1. 概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种『元编程』即对编程语言进行编程. 1.1 理解 Proxy 是在目标对象之前架设一层『拦截』,外部对对象的访问 ...

  2. Python内置函数清单

    作者:Vamei 出处:http://www.cnblogs.com/vamei Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些 ...

  3. vue项目中使用mockjs+axios模拟后台数据返回

    自己写练手项目的时候常常会遇到一个问题,没有后台接口,获取数据总是很麻烦,于是在网上找了下,发现一个挺好用的模拟后台接口数据的工具:mockjs.现在把自己在项目中使用的方法贴出来   先看下项目的目 ...

  4. hadoop的价值在哪里

    新霸哥注意到了在移动互联网时代,很多的传统的系统架构已经不能满足现有的业务需要了,在大数据时代,我们需要新的架构才能满足海量数据处理能力. 在实际的应用中数据增长非常的迅速,数据类型也变的丰富了,业务 ...

  5. SpringBoot 企业级核心技术学习专题

    专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组件 002 Spring Boot 核心技术章节源码 Spring Boot 核心技术 ...

  6. 小黄车ofo法人被限制出境,它究竟还能撑多久?

    因为季节的原因,现在正是骑车的好时候,而且北京也开通了一条自行车的专用路.但就是在这么好的时候,我们发现,路边的小黄车却越来越少了,而且它的麻烦还不断! ofo法人被限制出境 6月12日消息,据上海市 ...

  7. 从subversion开始(svn安装配置全过程(+全套安装文件与配置文件))…..

    从subversion开始(svn安装配置全过程(+全套安装文件与配置文件))-.. 博客分类: 工具使用 SVNsubversion配置管理Apache应用服务器  </div> 花了一 ...

  8. trigger添加及表达式

    创建触发器 点击Configuration(配置) → Hosts(主机) 点击hosts(主机)相关行的trigger 点击右上角的创建触发器(create trigger) name : 触发器名 ...

  9. jekens安装

    https://jenkins.io/zh/download/ Generic Java package (.war) 下载jenkins.war文件 将jenkins.war发布到tomcat服务器 ...

  10. linux ngxtop安装安装及使用

    写在前面: ngxtop是Nginx日志实时分析利器 1.下载 下载地址:https://github.com/lebinh/ngxtop  下载zip文件到本地 登录linux服务器,定位到安装目录 ...