URAL 1250 Sea Burial 简单Floodfill
问这个人掉落的海域包含几个岛屿。
八方向相连为同一片海域,四方向相连为同一个岛屿。与边界相连的岛屿不算。
方法:在给定地图外面填充一圈".",从这个人掉落的地方开始进行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的更多相关文章
- Ural 1250 Sea Burial 题解
目录 Ural 1250 Sea Burial 题解 题意 输入 题解 程序 Ural 1250 Sea Burial 题解 题意 给定一个\(n\times m\)的地图,\(.\)为水,\(\#\ ...
- ural 1250. Sea Burial
1250. Sea Burial Time limit: 1.0 secondMemory limit: 64 MB There is Archipelago in the middle of a s ...
- sea.js简单使用教程
sea.js简单使用教程 下载sea.js, 并引入 官网: http://seajs.org/ github : https://github.com/seajs/seajs 将sea.js导入项目 ...
- ural 1250
有点坑的dfs 看懂题应该就会做了 神圣海必然围成一个圈 dfs将神圣还外围的全部去掉 简单题 #include <cstdio> #include <cstring> ...
- URAL 1203 Scientific Conference 简单dp 难度:0
http://acm.timus.ru/problem.aspx?space=1&num=1203 按照结束时间为主,开始时间为辅排序,那么对于任意结束时间t,在此之前结束的任务都已经被处理, ...
- URAL - 1091 Tmutarakan Exams (简单容斥原理)
题意:K个不同数组成的集合,每个数都不超过S且它们的gcd>1.求这样的数的个数 分析:从2开始枚举gcd,但这样会发生重复.譬如,枚举gcd=2的集合个数和gcd=3的集合个数,枚举6的时候就 ...
- URAL 1326. Bottle Taps(简单的状压dp)
题目不太好读懂,就是先给你一个n代表要从n个物品中买东西,然后告诉你这n个东西的单位价格,在给你m个集合的情况.就是每一个结合中有x件物品.他们合起来买的价格是k.这x件物品依次是:p1--px.之后 ...
- ural 1009. K-based Numbers(简单dp)
http://acm.timus.ru/problem.aspx?space=1&num=1009 题意:将一个n位数转化为合法的K进制数,有多少种情况.合法的K进制数即不含前导0,且任意两个 ...
- URAL 1513. Lemon Tale(简单的递推)
写几组数据就会发现规律了啊. .但是我是竖着看的.. .还找了半天啊... 只是要用高精度来写,水题啊.就当熟悉一下java了啊. num[i] = 2*num[i-1]-num[i-2-k]. 15 ...
随机推荐
- UVALive - 6571 It Can Be Arranged 最大流
题目链接: http://acm.hust.edu.cn/vjudge/problem/48415 It Can Be Arranged Time Limit: 3000MS 问题描述 Every y ...
- NYOJ-58 最小步数 AC 分类: NYOJ 2014-01-22 22:01 217人阅读 评论(0) 收藏
#include<stdio.h> void dfs(int step,int x,int y); int d[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; i ...
- 【bzoj1011】[HNOI2008]遥远的行星
1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 3711 Solved ...
- 引擎设计跟踪(九.14.2g) 将GNUMake集成到Visual Studio
最近在做纹理压缩工具, 以及数据包的生成. shader编译已经在vs工程里面了, 使用custom build tool, build命令是调用BladeShaderComplier, 并且每个文件 ...
- themeforest 模板
如果给个人或一个客户使用就购买Regular License 多个项目或多人就徐需要购买Extended License,然后看你买html模版还是wordpress模版了.html需要你自己会编程将 ...
- 高达渐出现效果Shader
原地址: http://liweizhaolili.blog.163.com/blog/static/1623074420140591864/ 最近在玩游戏<高达破坏者>,里面的高达出现的 ...
- 分布式数据存储 - MySQL主从复制高可用方案
前面几篇文章说道MySQL数据库的高可用方案主从复制.主从复制的延迟产生原因.延迟检测及延迟解决方案(并未从根本上解决),这种主从复制方案保证数据的冗余的同时可以做读写分离来分担系统压力但是并非是高可 ...
- iOS-CALayer实现简单进度条
/** * 用CALayer定制下载进度条控件 * 1.单独创建出CALayer * 2.直接修改CALayer的frame值,执行隐式动画,实现进度条效果 * 3.用定时器(NSTimer) ...
- JS中 判断null
以下是不正确的方法: var exp = null; if (exp == null) { alert("is null"); } exp 为 undefined 时,也会得到与 ...
- Windows 7 常用快捷键 命令
Win+E: 打开新的windows资源浏览器 Win+F:搜索文件或文件夹 Win+R:打开运行窗口 Win + D:显示桌面 Win + M:最小化所有窗口 Ctrl+Shift+N: 新建文件 ...