Ejemplo n.º 1
0
 private void CheckVertex(Vertex v)
 {
     if (v.neighbors.Count == 1)        // если сосед только один, то он - вторая вершина этого технологического размера d и сам вертекс - висячий
     {
         MegaVertex mv = new MegaVertex();
         mv.vertexList.Add(v);
         megaList.Add(mv);
         dicV_M.Add(v, mv);
     }
     else
     {
         for (int i = 0; i < v.neighbors.Count; i++)
         {
             if (v.dimensionTo[v.neighbors[i]]._type == type.nul && dicV_M.ContainsKey(v.neighbors[i]))
             {
                 dicV_M[v.neighbors[i]].vertexList.Add(v);        // этому мегавертексу теперь принадлежит и d.firstVertex
                 dicV_M.Add(v, dicV_M[v.neighbors[i]]);
                 break;                                           // достаточно первого попавшегося
             }
             if (i == v.neighbors.Count - 1)                      // если перечислили всё и дошли до сюда, то значит, что эта вершина соединена с нетехнологическим размером
             {
                 MegaVertex mv = new MegaVertex();
                 mv.vertexList.Add(v);
                 megaList.Add(mv);
                 dicV_M.Add(v, mv);
             }
         }
     }
 }
Ejemplo n.º 2
0
 // обход в глубину
 private void DFS(MegaVertex start)
 {
     start.visited = true;
     foreach (MegaVertex n in start.neighbors)
     {
         if (!n.visited)
         {
             DFS(n);
         }
     }
 }
Ejemplo n.º 3
0
 private void DFS_Cicle(MegaVertex v, MegaVertex parent)
 {
     if (v.visited)
     {
         cicle = true;
         return;
     }
     v.visited = true;
     foreach (MegaVertex n in v.neighbors)
     {
         if (n != parent)
         {
             DFS_Cicle(n, v);
         }
     }
 }
Ejemplo n.º 4
0
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        public void DeleteDimension(Dimension d)
        {
            MegaVertex mv1 = dicV_M[d.firstVertex];
            MegaVertex mv2 = dicV_M[d.secondVertex];

            mv1.neighbors.Remove(mv2);                                  // удаляем из списка соседей мегавертексы
            mv2.neighbors.Remove(mv1);
            mv1.vertexList.Remove(d.firstVertex);                       // удаляем из списка вертексов соответствующего мегавертекса вертексы
            mv2.vertexList.Remove(d.secondVertex);
            dicV_M.Remove(d.firstVertex);
            dicV_M.Remove(d.secondVertex);
            if (mv1.vertexList.Count == 0)
            {
                megaList.Remove(mv1);
            }
            if (mv2.vertexList.Count == 0)
            {
                megaList.Remove(mv2);
            }

            connectedComponentSearch();
            SearchCircle();
        }