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);
}
}
最后更新于
这有帮助吗?