예제 #1
0
        public void DoIt()
        {
            var helpList = new int[_graf.GetVertexCount()];

            foreach (var edge in _graf.GetEdgeList())
            {
                helpList[edge.StartVertex - 1]++;
                helpList[edge.FinishVertex - 1]++;
            }
            var counter = 0;

            foreach (var numOfVertex in helpList)
            {
                if (numOfVertex == 0)
                {
                    _result = "Нет Эйлерова цикла, граф несвязный";
                    return;
                }
                counter += numOfVertex % 2;
            }
            var floyd = new Floyd(_graf);
            var flag  = true;

            foreach (var edge in floyd.Matrix)
            {
                if (edge > 99999)
                {
                    flag = false;
                }
            }
            if (flag)
            {
                if (counter == 0)
                {
                    _result = "Есть Эйлеров цикл";
                    if (_mainDrawer.GetCheckedVetex() < 0)
                    {
                        return;
                    }
                    _mainDrawer.TimingDraw(GetEdgeList());
                    return;
                }
                else
                {
                    _result = "Нет Эйлерова цикла, есть вершины с нечетной степенью";
                    return;
                }
            }
            else
            {
                _result = "Нет Эйлерова цикла, граф несвязный";
                return;
            }
        }
예제 #2
0
        public void DoIt()
        {
            var dfs = new DFS(_graf);

            dfs.ApplyAlgoritm(_mainDrawer.GetCheckedVetex());
            _vetexNumList = dfs.VisitedVertex;
            if (dfs.EdgeList.Count != 0)
            {
                _mainDrawer.TimingDraw(dfs.EdgeList);
            }
        }
예제 #3
0
        public void DoIt()
        {
            var bfs = new BFS(_graf);

            bfs.ApplyAlgoritm(_mainDrawer.GetCheckedVetex());
            _vetexNumList = bfs.CheckList;
            if (bfs.EdgeList.Count != 0)
            {
                _mainDrawer.TimingDraw(bfs.EdgeList);
            }
        }
예제 #4
0
 public void DoAlgoritm(CheckEx checkEx)
 {
     if (checkEx.RGR)
     {
         _ex = new RGR(_graf);
     }
     if (checkEx.Laba4BFS)
     {
         _ex = new Laba4BFS(_mainDrawer, _graf);
         if (_mainDrawer.GetCheckedVetex() < 0)
         {
             return;
         }
     }
     if (checkEx.Laba4DFS)
     {
         _ex = new Laba4DFS(_mainDrawer, _graf);
         if (_mainDrawer.GetCheckedVetex() < 0)
         {
             return;
         }
     }
     if (checkEx.Laba5)
     {
         _ex = new Laba5(_mainDrawer, _graf);
     }
     if (checkEx.Laba6)
     {
         if (!_mainDrawer.FullListForDej())
         {
             return;
         }
         _ex = new Laba6(_mainDrawer, _graf);
     }
     _ex.DoIt();
     algoritmComplete?.Invoke();
 }