博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
323.Number of Connected Components in an Undirected Graph
阅读量:5337 次
发布时间:2019-06-15

本文共 2048 字,大约阅读时间需要 6 分钟。

/*     * 323.Number of Connected Components in an Undirected Graph     * 2016-4-2 by Mingyang     * 这个题目自己也是花了一段时间,自己的思路是先构建一个HashMap,每个值对应一个相邻边的list,然后根据list的长度的大小,如果为0表示res++     * 如果为1加到queue里面去,再一个一个的取消和自己的通路,像有向图那样,从list里面remove掉!结果发现行不通,万一很多点都是两个list 长度     * 那么就没法,所以我现在回归无向图的基本方法,就是用boolean记录访问过没,每到一个点就visited 为true,然后他会进去把自己的所有的相邻边     * 全部感染,访问。最后再跳出来。BFS很好的例子!!!     */     public int countComponents(int n, int[][] edges) {            if (n <= 1) {                return n;            }            List
> adjList = new ArrayList
>(); for (int i = 0; i < n; i++) { adjList.add(new ArrayList
()); } for (int[] edge : edges) { adjList.get(edge[0]).add(edge[1]); adjList.get(edge[1]).add(edge[0]); } boolean[] visited = new boolean[n]; int count = 0; for (int i = 0; i < n; i++) { if (!visited[i]) { count++; dfs(visited, i, adjList); } } return count; } public void dfs(boolean[] visited, int index, List
> adjList) { visited[index] = true; for (int i : adjList.get(index)) { if (!visited[i]) { dfs(visited, i, adjList); } } }

 不过还是Union Find要简单一些

private int[] father;public int countComponents(int n, int[][] edges) {    Set
set = new HashSet
(); father = new int[n]; for (int i = 0; i < n; i++) { father[i] = i; } for (int i = 0; i < edges.length; i++) { union(edges[i][0], edges[i][1]); } for (int i = 0; i < n; i++){ set.add(find(i)); } return set.size();}int find(int node) { if (father[node] == node) { return node; } father[node] = find(father[node]); return father[node];}void union(int node1, int node2) { father[find(node1)] = find(node2);}

 

转载于:https://www.cnblogs.com/zmyvszk/p/5652449.html

你可能感兴趣的文章
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(5):室内装修 转:http://blog.csdn.net/tcjiaan/article/details/7269014
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
jQuery上传插件Uploadify 3.2在.NET下的详细例子
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
正则表达式的用法
查看>>
线程安全问题
查看>>
SSM集成activiti6.0错误集锦(一)
查看>>
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>
C# 索引器
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
delphi 内嵌汇编例子
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>