Реализация алгоритма обхода графа в глубину на PHP

http://shujkova.ru/sites/default/files/lec7.pdf - оригинальный документ, в котором подробно описан алгоритм на C++.

Реализация на PHP:

        // представление графа в виде списка смежности
        $graph = [
            0 => [1, 2, 3],
            1 => [0, 4, 8],
            2 => [0, 5],
            3 => [0, 6, 7],
            4 => [1],
            5 => [2],
            6 => [3],
            7 => [3, 9],
            8 => [1],
            9 => [7],
        ];

        $used = [];
        $time_in = [];
        $time_out = [];
        $time = 0;
        // функция обхода графа глубину (depth-first search)
        function dfs($v, &$used, &$time_in, &$time_out, &$time, $graph){
            print "v = $v";
            $used[$v] = 1;
            $time_in[$v] = $time;
            $time++;
            foreach ($graph[$v] as $el){
                if (empty($used[$el])){
                    dfs($el, $used, $time_in, $time_out, $time, $graph);
                }
            }
            $time_out[$v] = $time;
            $time++;
        }

        dfs(0, $used, $time_in, $time_out, $time, $graph);

        $result = [];
        for ($i = 0; $i < 10; $i++){
            $result[$i]['time_in'] = $time_in[$i];
            $result[$i]['time_out'] = $time_out[$i];
        }

        print $result;
        
    

Результат будет следующий:

        v = 0
        v = 1
        v = 4
        v = 8
        v = 2
        v = 5
        v = 3
        v = 6
        v = 7
        v = 9    
    

То есть в таком порядке алгоритм обходил вершины: 0, 1, 4, 8, 2, 5, 3, 6, 7, 9.

Массив $result содержит номер шага входа в каждую вершину и выхода из неё. Результат будет следующий:

        Array
        (
            [0] => Array
                (
                    [time_in] => 0
                    [time_out] => 19
                )

            [1] => Array
                (
                    [time_in] => 1
                    [time_out] => 6
                )

            [2] => Array
                (
                    [time_in] => 7
                    [time_out] => 10
                )

            [3] => Array
                (
                    [time_in] => 11
                    [time_out] => 18
                )

            [4] => Array
                (
                    [time_in] => 2
                    [time_out] => 3
                )

            [5] => Array
                (
                    [time_in] => 8
                    [time_out] => 9
                )

            [6] => Array
                (
                    [time_in] => 12
                    [time_out] => 13
                )

            [7] => Array
                (
                    [time_in] => 14
                    [time_out] => 17
                )

            [8] => Array
                (
                    [time_in] => 4
                    [time_out] => 5
                )

            [9] => Array
                (
                    [time_in] => 15
                    [time_out] => 16
                )

        )    
    
Приложения: 

Тэг в списке: