首页 > 其他分享 >连通区域(Connected Components)问题

连通区域(Connected Components)问题

时间:2023-04-29 15:11:06浏览次数:36  
标签:连通 Components int s1 dfs Connected ints fun String

package main.java.test;

import java.util.Arrays;
import java.util.Scanner;

public class t5 {

    public static void main(String[] args) {
        //Scanner sc = new Scanner(System.in);
        //String s = sc.nextLine();
        String s = "3 5";
        String[] s1 = s.split(" ");
        System.out.println(s1);
        // 使用 Arrays.toString() 方法打印数组
        System.out.println(Arrays.toString(s1));

        int m = Integer.parseInt(s1[0]);
        int n = Integer.parseInt(s1[1]);


        //int[][] ints = new int[m][n];

        int[][] ints = {{0,0,1,0,0}, {0,1,1,0,0}, {2,0,0,0,0},{2,0,1,2,3},{0,0,1,2,5}};
        System.out.printf(String.valueOf(fun(ints)) );
    }

/*
 0,0,1,0,0
 0,1,1,0,0
 2,0,0,0,0
 2,0,1,2,3
 0,0,1,2,5

安顺序 从第一列向下开始 第一个点 为2 没有出界 记下2 把2置为0  四周的点执行dfs
他的上左右都返回0 下返回2  把记录的2 加下面点执行dfs返回的2  返回给fun函数

此时
 0,0,1,0,0
 0,1,1,0,0
 0,0,0,0,0
 0,0,1,2,3
 0,0,1,2,5
fun继续执行循环  执行到第二列第二个点 没有出界 查看值为1 记录并置为0 四周的点执行dfs
右侧点值为1 但是此点执行dfs返回的值为2   把记录的1 加右面点执行dfs返回的2 返回给fun函数
此时
 0,0,0,0,0
 0,0,0,0,0
 0,0,0,0,0
 0,0,1,2,3
 0,0,1,2,5
 
 


 */
    
    

    // 计算二维数组中最大的连通区域的和
    static int fun(int[][] ints){
        int m = ints.length;
        int n = ints[0].length;
        int max = 0; // 记录最大和
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if(ints[i][j]>0){
                    // 使用深度优先搜索计算当前位置的连通区域的和
                    int sum = dfs(ints,i,j);
                    // 更新最大和
                    if (sum > max) max = sum;
                }

            }


        }
        return max;
    }
    // 使用深度优先搜索计算二维数组中某个位置的连通区域的和
    static int dfs(int[][] ints,int i,int j){
        int m = ints.length;
        int n = ints[0].length;

        // 如果越界或者值为 0,直接返回 0
        if (i < 0 || i >= m || j < 0 || j >= n || ints[i][j] == 0) {
            return 0;
        }

        // 记录当前位置的值,并将其置为 0,避免重复计算
        int value = ints[i][j];
        ints[i][j] = 0;

        // 递归计算上下左右四个方向的连通区域的和,并加上当前位置的值
        return value + dfs(ints,i+1,j) + dfs(ints,i-1,j) + dfs(ints,i,j+1) + dfs(ints,i,j-1);

    }
}
View Code

 

标签:连通,Components,int,s1,dfs,Connected,ints,fun,String
From: https://www.cnblogs.com/q1231/p/17364023.html

相关文章

  • 基于肤色空间建模+连通域处理的人脸检测算法的MATLAB仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要        在过去的几年里,人脸识别受到了广泛的关注,被认为是图像分析领域最有前途的应用之一。人脸检测可以考虑人脸识别操作的很大一部分。根据其强度将计算资源集中在持有人脸的图像部分。图片......
  • 基于肤色空间建模+连通域处理的人脸检测算法的MATLAB仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要在过去的几年里,人脸识别受到了广泛的关注,被认为是图像分析领域最有前途的应用之一。人脸检测可以考虑人脸识别操作的很大一部分。根据其强度将计算资源集中在持有人脸的图像部分。图片中的人脸检测方法很复杂,因为......
  • 「学习笔记」tarjan 算法与强连通分量
    强连通的定义是:有向图G强连通是指,G中任意两个结点连通。强连通分量(StronglyConnectedComponents,SCC)的定义是:极大的强连通子图。说简单一点就是环,环内的点都在一个强连通分量里,单独一个点也算是强连通分量(自己可以到达自己)。变量inttim,sc;intdfn[N],low[N],scc[N];......
  • Erdős–Rényi 随机图的连通性
    对于给定的\(n\)个顶点,对于任意一个点对,以\(p\)的概率连边,这样得到的一个无向简单图上的概率分布,称为Erdős–Rényi随机图模型.那么,\(p\)有多大的时候,得到的图将会有很大概率连通呢?Erdős和Rényi给出了如下结果:对于\(p=(\logn+c)/n\),记事......
  • 【vue】error in ./src/components/NumberInfo/NumberInfo.vue
    出现背景:ant designvuepro执行yarnrunserve解决办法:修改src/components/NumberInfo.vue文件中style部分原来的:<stylelang="less"scoped>@import"index";</style>注释掉 @import"index"<stylelang="less"scoped&g......
  • 《综述图论中连通性及相关问题的一些处理方法》笔记
    基本概念边/点割集:若边集\(E'\)使得割掉这些边之后\(u\tov\)不连通,则\(E'\)是\((u,v)\)的边割集。类似地定义点割集。边/点连通度:若任意\((u,v)\)的割集大小都至少是\(s\),则\(u,v\)是\(s-\)边连通的。类似地定义点连通度。Menger定理:\(u\tov\)的边连通......
  • 天梯赛--列出连通集代码及注意事项
    问题描述:给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边......
  • [tarjan强连通分量算法] 目的,图解,思路,伪代码,实例
    强连通分量算法(Tarjan'sStronglyConnectedComponentAlgorithm)利用深度优先算法找到一个非强连通的有向图中的所有强连通子图。无向图可以被认为是同时具备u->v和v->u的图。一些概念强连通:在有向图中,任意点u与v之间存在有来回两个方向的通路,类似存在一个环;强连通图:图......
  • 移除给定 Q 个顶点后给定图中的连通分量计数
    移除给定Q个顶点后给定图中的连通分量计数是一个经典的图论问题。给定一个无向图G,和一个由Q个节点组成的集合S,问题的目标是找出在S中所有节点被移除后,G中剩余的连通分量的数量。这个问题在许多实际的应用中都有着广泛的应用,例如网络安全、社交网络分析等。解决这个问题的一种基......
  • OpenCV图像连通区域分析(14)
    图像连通区域图像的连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域,连通域分析是指在图像中寻找出彼此互相独立的连通域并将其标记出来。提取图像中不同的连通域是图像处理中较为常用的方法,例如在车牌识别、文字识别、目标检测等领域对感兴趣区域分割与识别。一般情况......