第一届山东省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省赛总结
去年打完区域赛之后,面对着两个队友都去找实习的情况,我自己对今年省赛还是有点慌的.不只一次的像我的队友说明自己很慌,但是老曹跟会长都说:“没事,慌啥!”前几场训练赛因为老曹跟秋洁有面试有时候只能一个人 ...
随机推荐
- centos7 apache httpd安装和配置django项目
一.安装httpd服务 apache在centos7中是Apache HTTP server.如下对httpd的解释就是Apache HTTP Server.所以想安装apache其实是要安装http ...
- shell编程:定义简单标准命令集
shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...
- UI内侧错题
此题考察的是JQuery UI下的menu插件的使用,ui-menu表示菜单的外层容器,如果菜单包含图标,该元素会另外带一个 ui-menu-icons class.故A B选项错误.ui-menu- ...
- Maven与Ant比较
Maven与Ant比较 0 « 上一篇:Jenkins学习三:介绍一些Jenkins的常用功能» 下一篇:Jenkins学习四:Jenkins 邮件配置 posted @ 2015-03-25 16: ...
- [LeetCode] Swap Nodes in Pairs 成对交换节点
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- 如何用TypeScript开发微信小程序
微信小程序来了!这个号称干掉传统app的玩意儿虽然目前处于内测阶段,不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了. 工具和文档可以参考官方文档:https://mp.weixin ...
- 如何用Unity创建一个的简单的HoloLens 3D程序
注:本文提到的代码示例下载地址>How to create a Hello World 3D holographic app with Unity 之前我们有讲过一次如何在HoloLens中创建 ...
- .net core 源码解析-web app是如何启动并接收处理请求
最近.net core 1.1也发布了,蹒跚学步的小孩又长高了一些,园子里大家也都非常积极的在学习,闲来无事,扒拔源码,涨涨见识. 先来见识一下web站点是如何启动的,如何接受请求,.net core ...
- HTML 字符实体 < >: &等
在 HTML 中,某些字符是预留的. 在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签. 如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用 ...
- Java中判断字符串是否为数字的五种方法
//方法一:用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ ...