Exemplo n.º 1
0
        private List <Edge> GetEdgeList()
        {
            var matrix      = ConvertToMatrix.GetMatrix(_graf);
            var edgeList    = new List <Edge>();
            var vertexStack = new Stack <int>();
            var rootList    = new List <int>();

            var root = _mainDrawer.GetCheckedVetex();

            vertexStack.Push(root);

            while (vertexStack.Count != 0)
            {
                var edge = _graf.GetEdgeList().FirstOrDefault(e => e.StartVertex == vertexStack.Peek() || e.FinishVertex == vertexStack.Peek());
                if (edge == null)
                {
                    rootList.Add(vertexStack.Pop());
                    continue;
                }

                if (edge.StartVertex == vertexStack.Peek())
                {
                    vertexStack.Push(edge.FinishVertex);
                }
                else
                {
                    vertexStack.Push(edge.StartVertex);
                }
                _graf.DeleteEdge(edge);
            }

            rootList.Reverse();
            for (var i = 0; i < rootList.Count - 1; i++)
            {
                edgeList.Add(new Edge(rootList[i], rootList[i + 1], 0, false));
            }

            _graf.Restore(matrix);

            return(edgeList);
        }