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; } }
/// <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); }