/// <summary> /// Порівнює дану матрицю інцидентності з іншої такої ж розмірності /// Ваги і напрям не враховуються. Повертає номер першої вершини що не збігається /// </summary> /// <param name="m2"></param> /// <returns></returns> public int compareM(IncidenceMatrix m2) { int r = -1; for (int v = 0; v < _vertices.Count; v++) { for (int e = 0; e < _edges.Count; e++) { if (_m[v, e] != unmarks) { if (m2._m[v, e] == unmarks) { r = v; break; } } else { if (m2._m[v, e] != unmarks) { r = v; break; } } } } return(r); }
public Flow(Graph g) { _m = new IncidenceMatrix(g); foreach (Title_Vertex v in _m._vertices) { if (v.vertex.Name == "S") { _s = v; } if (v.vertex.Name == "T") { _t = v; } } }
public bool test() { bool r = test1(); if (r) { _m1 = new IncidenceMatrix(_g1); _m2 = new IncidenceMatrix(_g2); r = test2(); if (r) { r = test3(100); } } return(r); }
/// <summary> /// Створює граф з вказаної матриці інцидентності /// </summary> /// <param name="m"></param> /// <returns></returns> private Graph createGraph(IncidenceMatrix m) { Graph g = new Graph(); foreach (Title_Vertex v in m._v) { g.AddVertex(v.vertex); } foreach (Title_Edge e in m._e) { if (e.state) { g.AddEdge(e.edge); } } return(g); }
/// <summary> /// Створює максимальний кістяк, за допомогою алгоритма Прима /// </summary> /// <param name="g"></param> /// <returns></returns> public Graph usePrim(Graph g) { //Читаємо з графу g всі вершини та ребра List <Title_Vertex> allV = new List <Title_Vertex>(); foreach (Vertex v in g.Vertices) { allV.Add(new Title_Vertex(v)); } List <Title_Edge> allE = new List <Title_Edge>(); foreach (Edge e in g.Edges) { allE.Add(new Title_Edge(e)); } //Створюємо матрицю інцидентності графа _m = new IncidenceMatrix(allE.ToArray(), allV.ToArray()); primAlgoritm(); return(createGraph(_m)); }