<?php
$relations = [
[1,2],
[2,3],
[4,5],
[6,7],
[7,2]
];
$total_nodes = 7;
print_r(getConnectedComponents($relations,$total_nodes));
function getConnectedComponents($relations,$total_nodes){
$result = [];
$nodes = [];
$visited = [];
for($i=1;$i<=$total_nodes;++$i){
$nodes[$i] = [];
$visited[$i] = false;
}
foreach($relations as $relation){
$nodes[$relation[0]][] = $relation[1];
$nodes[$relation[1]][] = $relation[0];
}
for($i=1;$i<=$total_nodes;++$i){
if(!$visited[$i]){
$temp = [];
dfs($nodes,$i,$visited,$temp);
$result[] = $temp;
}
}
return $result;
}
function dfs($nodes,$node,&$visited,&$temp){
if($visited[$node]) return;
$visited[$node] = true;
$temp[] = $node;
foreach($nodes[$node] as $child_node){
dfs($nodes,$child_node,$visited,$temp);
}
}
preferences:
71.39 ms | 402 KiB | 5 Q