Description

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 A and element B are both balloons. They are connected if:

i) They are adjacent;

ii) There is a list of element C1, C2, … , 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?

Input

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.

Output

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.

Sample Input

5 11001 00100 11111 11010 10010 0

Sample Output

Case 1: 3 2

HINT

 

Source

山东第一届省赛



题目链接:http://acm.upc.edu.cn/problem.php?id=1929

这道题不是很难,可能初次做的同学会觉得无从下手,思路很简单

   第一步:输入
     第二部:对输入的数据加墙,即把输入的数据用0括起来;假设输入

                  1 1 0 0 1
                  0 0 1 0 0
                  1 1 1 1 1
                  1 1 0 1 0
                  1 0 0 1 0

             加墙:

                0 0 0 0 0 0 0
                0 1 1 0 0 1 0
                0 0 0 1 0 0 0
                0 1 1 1 1 1 0
                0 1 1 0 1 0 0
                0 1 0 0 1 0 0
                0 0 0 0 0 0 0

    第三步:定义两个标志位数组a[n][n],b[n][n],分别对应第一种搜索方式,和第二种搜索方式

第四步:对于第一种搜索方式:上下左右四个方向搜索,跳出条件是“无路可走”或者“标志位为1”(代表已经搜索过)——if(a[x][y]==0||b[x][y]==1){return ;}

        对于第二种搜索方式:八个方向搜索,就跳出条件与第一种一致

代码:

import java.util.Scanner;
public class Main {
public static int a[][];
public static int b[][];
public static int c[][];
public static void dfs1(int x,int y){
if(a[x][y]==0||b[x][y]==1){
return ;
}
b[x][y]=1;
dfs1(x,y+1);
dfs1(x,y-1);
dfs1(x-1,y);
dfs1(x+1,y); }
public static void dfs2(int x,int y){
if(a[x][y]==0||c[x][y]==1){
return ;
}
c[x][y]=1;
dfs2(x,y+1);
dfs2(x,y-1);
dfs2(x-1,y);
dfs2(x+1,y);
dfs2(x+1,y+1);
dfs2(x-1,y-1);
dfs2(x-1,y+1);
dfs2(x+1,y-1);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int d=1;
while(sc.hasNextInt()){ int t=sc.nextInt();
if(t==0)
break;
a=new int[t+2][t+2];
b=new int[t+2][t+2];
c=new int[t+2][t+2];
for(int i=1;i<t+1;i++){
String s=sc.next();
for(int j=1;j<t+1;j++){
a[i][j]=s.charAt(j-1)-'0';
}
}
for(int i=0;i<t+2;i++){
for(int j=0;j<t+2;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
int con1=0,con2=0;
for(int i=1;i<t+1;i++){
for(int j=1;j<t+1;j++){
if(a[i][j]!=0&&b[i][j]==0){
con1++;
dfs1(i,j);
}
}
}
for(int i=1;i<t+1;i++){
for(int j=1;j<t+1;j++){
if(a[i][j]!=0&&c[i][j]==0){
con2++;
dfs2(i,j);
}
}
}
System.out.println("Case "+d+": "+con1+" "+con2);
System.out.println();
d++;
}
}
}

 

第一届山东省ACM——Balloons(java)的更多相关文章

  1. 第一届山东省ACM——Phone Number(java)

    Description We know that if a phone number A is another phone number B’s prefix, B is not able to be ...

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

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

  3. sdut 2159:Ivan comes again!(第一届山东省省赛原题,STL之set使用)

    Ivan comes again! Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 The Fairy Ivan gave Say ...

  4. 第七届山东省ACM省赛

    激动人心的省赛终于结束了…平静下来再回头看真的感觉一波三折…先是赛前毫无预兆的查出突发性耳聋…伴随而来的就是左耳听力下降.轻微耳鸣.极个别情况下的头晕…不过这都还好,毕竟药物可以恢复…热身赛只过了一道 ...

  5. sdut 2153:Clockwise(第一届山东省省赛原题,计算几何+DP)

    Clockwise Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Saya have a long necklace with ...

  6. sdut 2154:Shopping(第一届山东省省赛原题,水题)

    Shopping Time Limit: 1000MS Memory limit: 65536K 题目描述 Saya and Kudo go shopping together.You can ass ...

  7. sdut 2158:Hello World!(第一届山东省省赛原题,水题,穷举)

    Hello World! Time Limit: 1000MS Memory limit: 65536K 题目描述 We know that Ivan gives Saya three problem ...

  8. 第十届山东省acm省赛补题(1)

    今天第一场个人训练赛的题目有点恐怖啊,我看了半个小时多硬是一道都不会写.我干脆就直接补题去了.... 先补的都是简单题,难题等我这周末慢慢来吧... A Calandar Time Limit: 1 ...

  9. 2018年第九届山东省ACM省赛总结

    去年打完区域赛之后,面对着两个队友都去找实习的情况,我自己对今年省赛还是有点慌的.不只一次的像我的队友说明自己很慌,但是老曹跟会长都说:“没事,慌啥!”前几场训练赛因为老曹跟秋洁有面试有时候只能一个人 ...

随机推荐

  1. MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL

    MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL   是因为目标板的芯片处于休眠 ...

  2. Java并发基础总结

    并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力.如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可 交互性将大大改善.现代的PC都有多个CPU或一个CPU中有多 ...

  3. iOS 解决LaunchScreen中图片加载黑屏问题

    iOS 解决LaunchScreen中图片加载黑屏问题 原文: http://blog.csdn.net/chengkaizone/article/details/50478045 iOS 解决Lau ...

  4. Anna-senpai帖子翻译与Mirai源代码使用

    Anna-senpai这个人太好玩了,整件事就像没有黄段子的无聊世界那样. 无聊翻译了一下,顺便实验了效果. --------------------------------------------- ...

  5. 【原创】Chrome最新版(53-55)再次爆出BUG!

    前言 今年十月份,我曾发布一篇文章<Chrome53 最新版惊现无厘头卡死 BUG!>,不过那个BUG在最新的 Chrome 54 中已经修正. 而今天即将发布的Chrome弱智BUG: ...

  6. Redis中connect与pconnect区别?

    1.首先先介绍下connect和pconnect的区别. connect:脚本结束之后连接就释放了. 2.pconnect:脚本结束之后连接不释放,连接保持在php-fpm进程中. 所以使用pconn ...

  7. MS SQL SERVER导出表结构到Excel

    通过sql语句导出表结构 SELECT 表名 Then D.name Else '' End, 表说明 Then isnull(F.value,'') Else '' End, 字段序号 = A.co ...

  8. cmd常用命令

    2016.12.18 0:07 (持续更新) cd 目录名:打开文件目录, cd .. 返回上一目录 cd ... 返回上上级目录 cd \ 返回根目录 cls 清除当前cmd页面所有的记录 md 名 ...

  9. C#-WebForm-Repeater-重复器

    Repeater-重复器 - 类似WinForm中的ListView,用列表来展示数据 格式: <body> <form id="form1" runat=&qu ...

  10. django用户认证

    利用django自带认证功能实现用户登录认证. views.py # Create your views here. from django.shortcuts import render_to_re ...