Java-寻找矩阵连通域个数

给定一个矩阵,寻找连通域个数:前后左右相同为连通

ex:

0 1 0 1

0 1 1 1

0 0 1 0

0 1 0 0

输出2

利用深度搜索思路:

 1     public static int getCount(int[][] A) {
 2         int result = 0;
 3         for (int i = 0; i < A.length; i++) {
 4             for (int j = 0; j < A[0].length; j++) {
 5                 if (A[i][j] == 1) {
 6                     result++;
 7                     erase(A, i, j);
 8                 }
 9             }
10         }
11         return result;
12     }
13
14     public static void erase(int[][] A, int i, int j) {
15         A[i][j] = 0;
16         while (i - 1 >= 0 && A[i - 1][j] == 1) {
17             erase(A, i - 1, j);
18         }
19         while (i + 1 < A.length && A[i + 1][j] == 1) {
20             erase(A, i + 1, j);
21         }
22         while (j - 1 >= 0 && A[i][j - 1] == 1) {
23             erase(A, i, j - 1);
24         }
25         while (j + 1 < A[0].length && A[i][j + 1] == 1) {
26             erase(A, i, j + 1);
27         }
28
29     }

Java-寻找矩阵连通域个数,布布扣,bubuko.com

时间: 2024-12-22 22:16:29

Java-寻找矩阵连通域个数的相关文章

java编写输入一个数判断是否是回文数,所谓回文数比如121,1221,6778776

package com.hao947; import java.util.Scanner; public class demo5 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x = 0; x = scanner.nextInt(); System.out.println("请输入一个4-8位的数"); int dig[] = new int[10]; i

java输出矩阵

输出如下矩阵: 0000 0111 0122 0123 public static void main(String[] args){ for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ System.out.print(i>=j?j:i); } System.out.println(); } } java输出矩阵

java 简单矩阵乘法运算

1.计算的两个矩阵其中第一个矩阵的列数必须和第二个矩阵的行数一致: 2.第一个矩阵的行数决定了结果矩阵的行数,第二个矩阵的列数决定了结果矩阵的列数: 1 package org.admln.matrix; 2 /* 3 * 20150211 4 */ 5 public class MatrixMultiplication { 6 public static void main(String[] args) { 7 /* 8 * 1.构建矩阵 9 * 2 9 7 4 2 10 * matrix1=

[java]寻找最优线程数

1.前言  最近被问到一个问题,"我用java写了一个用到多线程的功能,但是线程数应该多少个比较好呢?".这个问题以前听的版本有:"CPU核心数的2倍","和CPU核心数一样","CPU核心数加1".但是因为一个"懒"字将这个问号埋在了心底.为了给这个故事画上一个完美的句号,所以就有了这篇博文. 2.线程定义    线程(英语:thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中

寻找1的个数

一.题目与要求 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求:写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12)  = 5. 在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.设计思路 寻找1的出现的个数,可以采用枚举的方式,统计1出现的个数,但是,这种算法效率不高,那么,在正整数中,1出现的个数是有规律的,如果能找到这个规律,效率应该会得到很大的提高.举例:   个位 十位 百位 ... 3

java实现读入一个数n,计算其各位数字之和,用汉语拼音写出和的每一位数字

今天看到一篇文章:[原始链接] 题目是"读入一个数n,计算其各位数字之和,用汉语拼音写出和的每一位数字",是用c语言实现的.由于我目前正在学习java,所以想用java来实现下. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格. import java.io.BufferedReader; import java.io.IOException

java,从键盘输入个数不确定的整数,并判断输入的正数和负数的个数,输入0时结束程序。

package study01; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //正数的个数 int count1 = 0; //负数的个数 int count2 = 0; int input = sc.nextInt(); while (input != 0) { if (input > 0)

java实现找一个数范围内所有的一

一.题目内容 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数.要求:写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12)  = 5.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.设计思路 按每个位来计算1的数量,每相邻的三位数有联系,abc,就先算c,再加上b,最后再加上a 三.实验代码 //FindOne.java package com.minirisoft; import java.util.Sc

Java实现矩阵计算器【代码】

其实这个程序最开始是大二下学期Java的一次平时作业,当时只要求产生几个随机矩阵并对这些矩阵进行计算. 所以当时没去实现现在这么丰富而且实用的功能.不过当时倒是挺想去做的,无奈有些不知道怎么去实现. 现在是大三下的小学期,前不久刚考完期末,闲来无事把之前落下的这事给补上了,也算是了结了老夫的一大心事. 这个矩阵的代码在我的Github: https://github.com/JiaxinTse/MatrixCalculator 根据目前我的测试,暂时没有发现什么bug,有bug可以向我反映或者帮