http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2152

Balloons

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

Both Saya and Kudo like balloons. One day, they heard that in the central park, there will be thousands of people fly balloons to pattern a big image.
They were very interested about this event, and also curious about the image.
Since there are too many balloons, it is very hard for them to compute anything they need. Can you help them?
You can assume that the image is an N*N matrix, while each element can be either balloons or blank.
Suppose element and element B are both balloons. They are connected if:
i) They are adjacent;
ii) There is a list of element C1C2, … , Cn, while A and C1 are connected, C1 and C2 are connected …Cn and B are connected.
And a connected block means that every pair of elements in the block is connected, while any element in the block is not connected with any element out of the block.
To Saya, element A(xa,ya)and B(xb,yb) is adjacent if |xa-xb| + |ya-yb| ≤ 1 
But to Kudo, element A(xa,ya) and element B (xb,yb) is adjacent if |xa-xb|≤1 and |ya-yb|≤1
They want to know that there’s how many connected blocks with there own definition of adjacent?

输入

The input consists of several test cases.
The first line of input in each test case contains one integer N (0<N≤100), which represents the size of the matrix.
Each of the next N lines contains a string whose length is N, represents the elements of the matrix. The string only consists of 0 and 1, while 0 represents a block and 1represents balloons.
The last case is followed by a line containing one zero.

输出

 For each case, print the case number (1, 2 …) and the connected block’s numbers with Saya and Kudo’s definition. Your output format should imitate the sample output. Print a blank line after each test case.

示例输入

5
11001
00100
11111
11010
10010 0

示例输出

Case 1: 3 2

提示

 

来源

 2010年山东省第一届ACM大学生程序设计竞赛

示例程序

分析:

题意:(1)求图中四连块(有公共边的方块)的个数;

(2)求图中八连块(有公共顶点的方块)的个数。

这道题和nyist 上的水池数目 类似。直接dfs。

AC代码:

 #include<stdio.h>
#include<string.h>
const int N = ;
int vis1[N][N],map[N][N],vis[N][N];
void dfs1(int x,int y)//搜索四个方向
{
if (!map[x][y]||vis1[x][y])
return ;
vis1[x][y] = ;
dfs1(x-,y);
dfs1(x+,y);
dfs1(x,y-);
dfs1(x,y+);
}
void dfs(int x,int y)//搜索八个方向
{
if(!map[x][y]||vis[x][y])
return ;
vis[x][y] =;
dfs(x-,y-);dfs(x-,y);dfs(x-,y+);
dfs(x,y-); dfs(x,y+);
dfs(x+,y-);dfs(x+,y);dfs(x+,y+); }
int main()
{
int n,i,j,o = ;
char s[N];
while(~scanf("%d",&n)&&n)
{
++o;
int cnt1 = ;
int cnt2 = ;
memset(vis1,,sizeof(vis));
memset(vis,,sizeof(vis));
memset(map,,sizeof(map));
for (i = ; i < n; i ++)
{
scanf("%s",s);
for (j = ; j < n; j ++)
{
map[i+][j+] = s[j]-'';//在图周围加一圈空格,防止判断时越界
}
}
for (i = ; i <= n; i ++)
{
for (j = ; j <= n; j ++)
{
if (map[i][j]&&!vis1[i][j])
{
cnt1++;
dfs1(i,j); }
if (map[i][j]&&!vis[i][j])
{
cnt2++;
dfs(i,j);
} }
}
printf("Case %d: %d %d\n\n",o,cnt1,cnt2);
} return ;
}

sdutoj 2152 Balloons的更多相关文章

  1. sdut 2152:Balloons(第一届山东省省赛原题,DFS搜索)

    Balloons Time Limit: 1000MS Memory limit: 65536K 题目描述 Both Saya and Kudo like balloons. One day, the ...

  2. Balloons(山东省第一届ACM省赛)

    Balloons Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Both Saya and Kudo like balloons ...

  3. [LeetCode] Minimum Number of Arrows to Burst Balloons 最少数量的箭引爆气球

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  4. [LeetCode] Burst Balloons 打气球游戏

    Given n balloons, indexed from 0 to n-1. Each balloon is painted with a number on it represented by ...

  5. 第一届山东省ACM——Balloons(java)

    Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...

  6. BZOJ 2152 & 点分治

    Description: 只是打法法塔前测试一下板子 Code: /*================================= # Created time: 2016-04-20 14:3 ...

  7. [LeetCode] 452 Minimum Number of Arrows to Burst Balloons

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  8. BZOJ 2152: 聪聪可可 树分治

    2152: 聪聪可可 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一 ...

  9. Code[VS] 2152 滑雪题解

    Code[VS] 2152 滑雪题解 题目描述 Description trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行 ...

随机推荐

  1. Linux - full name of command

    pwd: print working directory cd: change directory ls: list ps: process status su: switch user mv: mo ...

  2. P1434 滑雪

    水题,记忆化搜索,队列bfs均可 我们定义f[i][j]为到(i, j)的最长路径.然后就不难得出状态转移方程,然后使用无脑dfs,或者有脑递推都是可以的. #include <bits/std ...

  3. [转]GPS纠偏算法,适用于google,高德体系的地图

    此文是转的,算法没验证过,只是记录一下. GPS纠偏算法,适用于google,高德体系的地图,精确度还比较高.我试了一下比高德本身的纠偏还精确点. /** * gps纠偏算法,适用于google,高德 ...

  4. Intel Visual Fortran Compiler 11调用lapack库实现并行多处理计算

    采用fortran进行数值计算的朋友们都应该听说过大名鼎鼎的lapack库,我就不多做介绍了,在此,我只是介绍一个编译好的lapack二进制包ACML(AMD Core Math Library),并 ...

  5. 【转】Unity3D中Layers和LayerMask解析

    http://blog.csdn.net/yupu56/article/details/50441151 Unity中是用int32来表示32个Layer层.int32表示二进制一共有32位(0-31 ...

  6. Qt和KDevelop在Linux下安装(qt-x11-commercial-src-4.3.1和kdevelop-3.5.0)

    qt-x11-commercial-src-4.3.1.tar.gz.kdevelop-3.5.0.tar.bz2在Fedora 8下安装. 安装KDevelop:安装KDevelop3.5要求,KD ...

  7. C++字符数字的编码(Encode)与解码(Decode)

    在日常应用中,我们常用结构体或者类来存储一条信息,这种方式很方便,但是不利于数据的传输.例如在网络编程中,我们需要将结构中的数据转化为字节流才能进行传输,我们可以利用memcpy强行将结构化的数据转化 ...

  8. 20145211 《Java程序设计》第8周学习总结——自在飞花轻似梦

    教材学习内容总结 认识NIO Java NIO(New Input/Output)--新的输入/输出API包--是2002年引入到J2SE 1.4里的.Java NIO的目标是提高Java平台上的I/ ...

  9. Magento 安装时文件权限 设置

    http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/magento_filesystem_permission ...

  10. 解决.Net设置只读、隐藏后后台获取不到值的问题

    在前台页面上放了几个textbox,用 ReadOnly=true设置不可编辑,用visible="False"设置不可见 用jquery给textbox赋值后在后台页面获取不到t ...