示例#1
0
        private void iteration()
        {
            //Шукаємо найважче з ребер, що прилягають до використаних вершин
            int maxE = getMaxEdge();

            //Видаляємо розглянуте ребро з матриці інцидентності (_c)
            TwoNumber n = serachConectedVertises(_m._v, _m._e[maxE]);

            _m._c[n._n1, maxE] = 0;
            _m._c[n._n2, maxE] = 0;
            //Якщо використана тільки одна з вершин,
            //додаємо позначаємо ребро як використане
            if (!(_m._v[n._n1].state && _m._v[n._n2].state))
            {
                //Позначаємо ребро як використане
                _m._e[maxE].state = true;
                //Позначимо обидві вершини як використані
                _m._v[n._n1].state = true;
                _m._v[n._n2].state = true;
            }
        }
示例#2
0
        /// <summary>
        /// Шукає номера вершин в масиві, що з'єднані вказаним ребром
        /// </summary>
        /// <param name="_v"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        private TwoNumber serachConectedVertises(Title_Vertex[] _v, Title_Edge e)
        {
            //Знаходимо вершини, які з'єднюються ребром
            TwoNumber number = new TwoNumber();

            for (int j = 0, t = 0; j < _v.Length; j++)
            {
                if (_v[j].vertex.CompareTo(e.edge.Source) == 0)
                {
                    number._n1 = j;
                    t++;
                }
                else if (_v[j].vertex.CompareTo(e.edge.Target) == 0)
                {
                    number._n2 = j;
                    t++;
                }
            }

            return(number);
        }