Clasificación topológica en PHP

Encontré esta función de clasificación topológica para PHP:

Fuente:http://www.calcatraz.com/blog/php-topological-sort-function-384/

function topological_sort($nodeids, $edges) {
    $L = $S = $nodes = array();
    foreach($nodeids as $id) {
        $nodes[$id] = array('in'=>array(), 'out'=>array());
        foreach($edges as $e) {
            if ($id==$e[0]) { $nodes[$id]['out'][]=$e[1]; }
            if ($id==$e[1]) { $nodes[$id]['in'][]=$e[0]; }
        }
    }
    foreach ($nodes as $id=>$n) { if (empty($n['in'])) $S[]=$id; }
    while (!empty($S)) {
        $L[] = $id = array_shift($S);
        foreach($nodes[$id]['out'] as $m) {
            $nodes[$m]['in'] = array_diff($nodes[$m]['in'], array($id));
            if (empty($nodes[$m]['in'])) { $S[] = $m; }
        }
        $nodes[$id]['out'] = array();
    }
    foreach($nodes as $n) {
        if (!empty($n['in']) or !empty($n['out'])) {
            return null; // not sortable as graph is cyclic
        }
    }
    return $L;
}

Me veo bien y corto. De todos modos, para alguna entrada, obtengo líneas duplicadas en la salida, veahttp://codepad.org/thpzCOyn

En general, la clasificación parece ser correcta si elimino los duplicados conarray_unique()

Revisé la función con dos ejemplos y la clasificación en sí se ve correcta.

Debería solo llamararray_unique() en el resultado?

Respuestas a la pregunta(2)

Su respuesta a la pregunta