Example #1
0
        private void Dfs(int current)
        {
            _isVisisted[current] = true;
            var allVertex = _graph.GetAdjacentVertexes(current);

            for (int j = 0; j < allVertex.Count; j++)
            {
                if (!_isVisisted[allVertex[j]])
                {
                    _from[allVertex[j]] = current;   //记录当前要访问的结点是从哪来的
                    Dfs(allVertex[j]);
                }
            }
        }
        //递归的实现
        // private void Bfs(int current)
        // {
        //     _isVisited[current] = true;
        //     var adjacentVertexes = _graph.GetAdjacentVertexes(current);
        //     adjacentVertexes.ForEach(x=>{
        //         if (!_isVisited[x] && !_gQueue.Contains(x))
        //         {
        //             _from[x] = current;
        //             _gQueue.Enqueue(x);
        //         }

        //     });

        //     while(_gQueue.Count != 0)
        //     {
        //         Bfs((int)_gQueue.Dequeue());
        //     }
        // }

        //非归递实现
        private void Bfs(int start)
        {
            _gQueue.Enqueue(start);
            while (_gQueue.Count != 0)
            {
                var current = (int)_gQueue.Dequeue();
                _isVisited[current] = true;
                var adjacentVertex = _graph.GetAdjacentVertexes(current);
                for (int i = 0; i < adjacentVertex.Count; i++)
                {
                    var child = adjacentVertex[i];
                    if (!_isVisited[child] && !_gQueue.Contains(child))
                    {
                        _gQueue.Enqueue(child);
                        _from[child]  = current;
                        _steps[child] = _steps[current] + 1;
                    }
                }
            }
        }