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

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

方法:在给定地图外面填充一圈".",从这个人掉落的地方开始进行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. 深入分析windows下配置wamp环境各模块的版本兼容性

    版本相关概念说明: ts/nts: thread safety 线程安全 TS refers to multithread capable builds. NTS refers to single t ...

  2. JAVA Hashmap不能用基本的数据类型

    今天开始学习Java... 转载:http://moto0421.iteye.com/blog/1143777 今天试了一下HahsMap, 采用如下形似定义 (这个下面是用了csdn的一位同仁的文章 ...

  3. git学习——<一>git安装

    一.windows.linux平台安装 windows平台安装简单方便,到git官网上下载exe安装包即可,会把git bash shell给你安装好,你到命令窗口便可直接使用. linux平台安装, ...

  4. HBAO

    nv算是坑死我了,之前下的hbao的sample这次怎么都找不到 http://developer.download.nvidia.com/SDK/10.5/direct3d/samples.html ...

  5. Python中__init__方法/__name__系统变量讲解

    __init__方法在类的一个对象被建立时,马上运行.这个方法可以用来对你的对象做一些你希望的初始化. 代码例子 test.py#!/usr/bin/python# Filename: class_i ...

  6. (翻译)Google Guava Cache

    翻译自Google Guava Cache This Post is a continuation of my series on Google Guava, this time covering G ...

  7. 金融证券协议FIX/FAST/STEP

    金融信息交换协议FIX是适用于实时证券.金融电子交易的数据通信标准.它是把各类证券金融业务需求流程格式化,使之成为一个可用计 算机语言描述的功能流程,并在每个业务功能接口上统一交换格式.STEP(Se ...

  8. https://google-developers.appspot.com/chart/

    https://google-developers.appspot.com/chart/

  9. mysql 事务提交过程

     打开binlog选项后,执行事务提交命令时,就会进入两阶段提交模式.两阶段提交分为prepare阶段和commit两个阶段.流程如下 :这里面涉及到两个重要的参数:innodb_flush_log_ ...

  10. lightoj 1408 Batting Practice (概率问题,求期望,推公式)

    题意:一个人若连续进k1个球或连续不进k2个球,游戏结束,给出这个人不进球的概率p(注意:是不进球!!!),求到游戏结束时这个投球个数的期望. 不进球概率为p,进概率 q=1-p.设 f[i] 表示连 ...