Connected Component in Undirected Graph

public class Solution {
    /*
     * @param nodes: an array of Undirected graph node
     * @return: a connected set of an Undirected graph
     */
		public List<List<Integer>> connectedSet(List<UndirectedGraphNode> nodes) {
			List<List<Integer>> result = new ArrayList<>();
			Map<UndirectedGraphNode, Boolean> visited = new HashMap<>();
			for (UndirectedGraphNode node : nodes) {
				visited.put(node, false);
			}
			for (UndirectedGraphNode node : nodes) {
				if (visited.get(node) == false) {
					bfs(node, visited, result);
				}
			}
			return result; 
		}
		private void bfs(UndirectedGraphNode node, Map<UndirectedGraphNode, Boolean> visited, List<List<Integer>> result) {
			List<Integer> path = new ArrayList<>();  //每一层遍历的结果
			Queue<UndirectedGraphNode> queue = new LinkedList<>();
			queue.offer(node);
			visited.put(node, true); //起点
			
			while (!queue.isEmpty()) {
				UndirectedGraphNode curNode = queue.poll();
				path.add(curNode.label); //每一层 path 都会加入新的值
				for (UndirectedGraphNode nei : curNode.neighbors) {
					if (visited.get(nei) == false) {
						queue.offer(nei);
						visited.put(nei, true);
					}
				}
			}
			Collections.sort(path);
			result.add(path);
		}
}

最后更新于

这有帮助吗?