问这个人掉落的海域包含几个岛屿。

八方向相连为同一片海域,四方向相连为同一个岛屿。与边界相连的岛屿不算。

方法:在给定地图外面填充一圈".",从这个人掉落的地方开始进行floodfill,标出他所在的海域。

然后再从(0, 0)点进行一次floodfill,把之前标记的海域之外的东西全部清掉。

最后统计岛屿个数即可。

注意:坐标是反着的

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <algorithm> using namespace std; const int MAXN = ; const int dx[] = { -, , , , -, -, , , - };
const int dy[] = { , -, , , -, , , -, - }; struct Point
{
int x, y;
Point( int x = , int y = ): x(x), y(y) { }
}; Point Q[MAXN * MAXN * ];
char G[MAXN][MAXN];
bool vis[MAXN][MAXN];
int R, C, X, Y; bool check( int x, int y, bool wh )
{
if ( wh ) return x > && x <= R && y > && y <= C;
else return x >= && x <= R + && y >= && y <= C + ;
} void FloodFill( Point st, char ch1, char ch2, char ch3, int dir )
{
int front = , rear = ;
bool wh = false;
if ( dir == ) wh = true; Q[rear++] = st; while ( front < rear )
{
Point p = Q[front]; G[ p.x ][ p.y ] = ch3;
vis[ p.x ][ p.y ] = true;
//printf( "%d %d\n", p.x, p.y );
for ( int i = ; i < dir; ++i )
{
int xx = p.x + dx[i];
int yy = p.y + dy[i];
//printf( "vis[%d][%d] = %d\n", xx, yy, vis[xx][yy] );
if ( check( xx, yy, wh ) && !vis[xx][yy] && ( G[xx][yy] == ch1 || G[xx][yy] == ch2 ) )
{
vis[xx][yy] = true;
Q[rear++] = Point( xx, yy );
}
} ++front;
}
return;
} int main()
{
//freopen("s.txt", "w", stdout );
while ( ~scanf( "%d%d%d%d", &C, &R, &Y, &X ) )
{
memset( G, '.', sizeof(G) );
G[][ C + ] = '\0';
for ( int i = ; i <= R; ++i )
{
scanf( "%s", &G[i][] );
G[i][ C + ] = '\0';
} memset( vis, false, sizeof(vis) );
FloodFill( Point( X, Y ), '.', '.', '*', );
memset( vis, false, sizeof(vis) );
FloodFill( Point( , ), '.', '#', ' ', ); memset( vis, false, sizeof(vis) );
int ans = ;
for ( int i = ; i <= R; ++i )
for ( int j = ; j <= C; ++j )
if ( G[i][j] == '#' )
{
++ans;
FloodFill( Point( i, j ), '#', '#', '$', );
}
printf( "%d\n", ans );
}
return ;
}

URAL 1250 Sea Burial 简单Floodfill的更多相关文章

  1. Ural 1250 Sea Burial 题解

    目录 Ural 1250 Sea Burial 题解 题意 输入 题解 程序 Ural 1250 Sea Burial 题解 题意 给定一个\(n\times m\)的地图,\(.\)为水,\(\#\ ...

  2. ural 1250. Sea Burial

    1250. Sea Burial Time limit: 1.0 secondMemory limit: 64 MB There is Archipelago in the middle of a s ...

  3. sea.js简单使用教程

    sea.js简单使用教程 下载sea.js, 并引入 官网: http://seajs.org/ github : https://github.com/seajs/seajs 将sea.js导入项目 ...

  4. ural 1250

    有点坑的dfs  看懂题应该就会做了 神圣海必然围成一个圈  dfs将神圣还外围的全部去掉   简单题 #include <cstdio> #include <cstring> ...

  5. URAL 1203 Scientific Conference 简单dp 难度:0

    http://acm.timus.ru/problem.aspx?space=1&num=1203 按照结束时间为主,开始时间为辅排序,那么对于任意结束时间t,在此之前结束的任务都已经被处理, ...

  6. URAL - 1091 Tmutarakan Exams (简单容斥原理)

    题意:K个不同数组成的集合,每个数都不超过S且它们的gcd>1.求这样的数的个数 分析:从2开始枚举gcd,但这样会发生重复.譬如,枚举gcd=2的集合个数和gcd=3的集合个数,枚举6的时候就 ...

  7. URAL 1326. Bottle Taps(简单的状压dp)

    题目不太好读懂,就是先给你一个n代表要从n个物品中买东西,然后告诉你这n个东西的单位价格,在给你m个集合的情况.就是每一个结合中有x件物品.他们合起来买的价格是k.这x件物品依次是:p1--px.之后 ...

  8. ural 1009. K-based Numbers(简单dp)

    http://acm.timus.ru/problem.aspx?space=1&num=1009 题意:将一个n位数转化为合法的K进制数,有多少种情况.合法的K进制数即不含前导0,且任意两个 ...

  9. URAL 1513. Lemon Tale(简单的递推)

    写几组数据就会发现规律了啊. .但是我是竖着看的.. .还找了半天啊... 只是要用高精度来写,水题啊.就当熟悉一下java了啊. num[i] = 2*num[i-1]-num[i-2-k]. 15 ...

随机推荐

  1. 断点续传 (HTTP) 归纳

    由于最近项目中要上传较大的文件,基于公司原有的底层框架的局限性,对于大文件的传输都束手无策,基于文件传输的安全性,考虑用断点续传(HTTP)以及FTP上传两种方式实现下面归纳下HTTP续传和FTP上传 ...

  2. 利用glassfish4任意文件读取拿权限的一些思路

    只要讨论的是linux环境测试发现只针对GlassFish4,且基本上是已root运行的http://www.wooyun.org/bugs/wooyun-2010-0144595 zoomeye d ...

  3. IE6中布局常见问题

    1.众所周知,每个IE的版本都有两种模式,怪异模式(混杂模式)和标准模式.下图附上针对IE的hack. 2.另外有一种引进css的方法,也可以作为调整网站hack的方法:<!—[if IE 6] ...

  4. Oracle 11g安装与使用

    作为一个新手,学习Oracle,就连安装oracle都感觉到吃力! 经过不间断的搜罗.学习.尝试,找到一些比较有用的“指导”,罗列如下: 1. http://www.2cto.com/database ...

  5. 关于java调用linux shell 的问题

    问题的提出: shell脚本要做离线的数据处理任务 java调用脚本,将这种处理任务封装成webservice 特点: shell处理单个时间长 每次要处理文件量大 这里目前只做调用分析: 原来的: ...

  6. 理解Session的几种模式

    一.写在前面 我们在使用ASP.NET开发的过程中,有时会进行数据存储以实现请求前后的状态保持(HTTP是无状态保持的协议),而Session作为一种快速简单易于实现的方式被我们经常使用,当然如果出于 ...

  7. Sqli-labs less 37

    Less-37 本关与34关是大致相似的,区别在于处理post内容用的是mysql_real_escape_string()函数,而不是addslashes()函数,但是原理是一直的,上面我们已经分析 ...

  8. Android fill_parent、wrap_content和match_parent的区别

    三个属性都用来适应视图的水平或垂直大小,一个以视图的内容或尺寸为基础的布局比精确地指定视图范围更加方便. 1)fill_parent 设置一个构件的布局为fill_parent将强制性地使构件扩展,以 ...

  9. Ogre1.8.1源码编译

    本文的编译环境为Windows7_SP1 + VS2010_SP1 + CMake2.8.11   :) 资源下载 1. 下载Ogre1.8.1的源代码,下载链接地址:http://www.ogre3 ...

  10. 从底层理解Python的执行

    摘要:是否想在Python解释器的内部晃悠一圈?是不是想实现一个Python代码执行的追踪器?没有基础?不要怕,这篇文章让你初窥Python底层的奥妙. [编者按]下面博文将带你创建一个字节码级别的追 ...