第一届山东省ACM——Balloons(java)
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
Sample Output
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)的更多相关文章
- 第一届山东省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 ...
- sdut 2152:Balloons(第一届山东省省赛原题,DFS搜索)
Balloons Time Limit: 1000MS Memory limit: 65536K 题目描述 Both Saya and Kudo like balloons. One day, the ...
- sdut 2159:Ivan comes again!(第一届山东省省赛原题,STL之set使用)
Ivan comes again! Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 The Fairy Ivan gave Say ...
- 第七届山东省ACM省赛
激动人心的省赛终于结束了…平静下来再回头看真的感觉一波三折…先是赛前毫无预兆的查出突发性耳聋…伴随而来的就是左耳听力下降.轻微耳鸣.极个别情况下的头晕…不过这都还好,毕竟药物可以恢复…热身赛只过了一道 ...
- sdut 2153:Clockwise(第一届山东省省赛原题,计算几何+DP)
Clockwise Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Saya have a long necklace with ...
- sdut 2154:Shopping(第一届山东省省赛原题,水题)
Shopping Time Limit: 1000MS Memory limit: 65536K 题目描述 Saya and Kudo go shopping together.You can ass ...
- sdut 2158:Hello World!(第一届山东省省赛原题,水题,穷举)
Hello World! Time Limit: 1000MS Memory limit: 65536K 题目描述 We know that Ivan gives Saya three problem ...
- 第十届山东省acm省赛补题(1)
今天第一场个人训练赛的题目有点恐怖啊,我看了半个小时多硬是一道都不会写.我干脆就直接补题去了.... 先补的都是简单题,难题等我这周末慢慢来吧... A Calandar Time Limit: 1 ...
- 2018年第九届山东省ACM省赛总结
去年打完区域赛之后,面对着两个队友都去找实习的情况,我自己对今年省赛还是有点慌的.不只一次的像我的队友说明自己很慌,但是老曹跟会长都说:“没事,慌啥!”前几场训练赛因为老曹跟秋洁有面试有时候只能一个人 ...
随机推荐
- java基础学习02(简单的java程序)
简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...
- Spring Mock
今天看别人的测试代码,发现有 MockMvc.MockHttpServletRequest.MockHttpServletResponse ,不知道是干啥的,百度下下才知道 Mock这个东东. 下 ...
- [LeetCode] Implement Queue using Stacks 用栈来实现队列
Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...
- [LeetCode] Delete Duplicate Emails 删除重复邮箱
Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...
- 值得注意的IsHitTestVisible
这个属性我们平时可能并不怎么用.先来看下MSDN上的解释: 解释的非常专业,然而我并没有看懂. 说说我的理解吧:把这个属性设置为false,看起来没有变化,但操作上已经把他完全忽视了,不触发事件,可以 ...
- PowerBuilder笔记
powerbuilder中怎样新建一个pbl文件 在创建pbw之后,右键单击pbw,点新建,弹出对话矿,按图操作,就能创建pbl 主程序入口: 主程序入口代码: // Profile ahzbmysq ...
- ABP文档 :Overall - Module System
模块介绍 ABP提供了构建模块并将这些模块组合起来创建应用的基础设施.一个模块可以依赖另一个模块.一般来说,一个程序集可以认为是一个模块.如果应用中有多个程序集,建议为每个程序集创建一个模块定义.模块 ...
- 使用SharpZipLib实现文件压缩、解压
接口 public interface IUnZip { /// <summary> /// 功能:解压zip格式的文件. /// </summary> /// <par ...
- HTML5射击类游戏----【地球保卫战】
在线DEMO地址:打开: 游戏截图: 就不贴代码了, 因为代码太多了, 大概写一下这个游戏实现思路和一些实现: 游戏一共有三关, 每一关都有一个大Boss, Boss比较好杀,主要各种外星飞 ...
- C#笔记
关键字: 1.internal 被 internal 修饰的东西只能在本程序集(当前项目)内被使用. 注意事项: 1.解决c#代码引用c/c++代码出现的unsafe code错误警告提示 Unsaf ...