Given n
nodes labeled from 0
to n - 1
and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph.
Example 1:
Input:n = 5
andedges = [[0, 1], [1, 2], [3, 4]]
0 3 | | 1 --- 2 4 Output: 2
Example 2:
Input:n = 5
andedges = [[0, 1], [1, 2], [2, 3], [3, 4]]
0 4 | | 1 --- 2 --- 3 Output: 1
Note:
You can assume that no duplicate edges will appear in edges
. Since all edges are undirected, [0, 1]
is the same as [1, 0]
and thus will not appear together in edges
.
典型的图遍历, dfs
public class Solution { public int countComponents(int n, int[][] edges) { int res = 0; boolean A[] = new boolean[n]; Map<Integer, List<Integer>> map = new HashMap(); for(int i =0;i<n;i++) map.put(i,new LinkedList()); for(int i =0;i<edges.length;i++){ map.get(edges[i][0]).add(edges[i][1]); map.get(edges[i][1]).add(edges[i][0]); } for(int i =0;i<n;i++){ if(A[i] == false){ A[i] = true; res++; dfs(i,map, A); } } return res; } private void dfs(int root, Map<Integer, List<Integer>> map, boolean[] A){ List<Integer> list = map.get(root); for(Integer cur : list){ if(A[cur]==false){ A[cur] = true; dfs(cur, map,A); } } } }
Mistakes:
No comments:
Post a Comment