예제 #1
0
        /// <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);
        }
예제 #2
0
 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;
         }
     }
 }
예제 #3
0
        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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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));
        }