示例#1
0
 public void AddEdge(Edge x, Edge y)
 {
     x.Next = y;
 }
示例#2
0
        public void BuildEdge(int v1, int v2)
        {
            Vertex n1 = null, n2 = null;
            Vertex temp = _vfirst;

            while (temp != null)
            {
                int i = Decimal.Compare(v1, temp.Name);
                if (i == 0)
                {
                    //found 1st node..
                    n1 = temp;
                    break;
                }
                else
                {
                    temp = temp.Next;
                }
            }

            //check if edge already exists
            for (int i = 0; i < n1.Num_Edges; i++)
            {
                int j = Decimal.Compare(v2, n1.Adjacent[i].Name);
                if (j == 0)
                {
                    return;
                }
            }

            temp = _vfirst;
            while (temp != null)
            {
                int i = Decimal.Compare(v2, temp.Name);
                if (i == 0)
                {
                    //found 2nd node..
                    n2 = temp;
                    break;
                }
                else
                {
                    temp = temp.Next;
                }
            }

            n1.Adjacent[n1.Num_Edges++] = n2;

            Edge temp2 = new Edge(n1, n2);

            if (_efirst == null)
            {
                _efirst = temp2;
                _elast  = temp2;
            }
            else
            {
                temp2.AddEdge(_elast, temp2);
                _elast = temp2;
            }
        }
示例#3
0
        /*public void TraverseGraph() {
         *  Vertex root = Vfirst;
         *  int i=0,j=0;
         *  Vertex next = root.Adjacent[i];
         *
         *  while(j<Nodes) {
         *
         *          TestLibrary.Logging.WriteLine("root: " + root.Name);
         *          while(next != null) {
         *              TestLibrary.Logging.WriteLine(next.Name);
         *              if(next.Name == j) {break;}
         *              next = next.Adjacent[0];
         *          }
         *          i++;
         *          if((next = root.Adjacent[i]) == null) {
         *              i=0;
         *              j++;
         *              if(root == Vlast) break;
         *              else root = root.Next;
         *              next = root.Adjacent[i];
         *
         *                  }
         *      }
         *
         * }*/

        public void DeleteVertex()
        {
            Vertex temp1 = null;
            Vertex temp2 = _vfirst;

            DateTime time = DateTime.Now;
            Int32    seed = (Int32)time.Ticks;
            Random   rand = new Random(seed);

            int j = rand.Next(0, Nodes);

            //TestLibrary.Logging.WriteLine("Deleting vertex: " + j);

            while (temp2 != null)
            {
                int i = Decimal.Compare(j, temp2.Name);
                if (i == 0)
                {
                    if (temp2 == _vfirst)
                    {
                        temp2   = null;
                        _vfirst = _vfirst.Next;
                        break;
                    }
                    temp1.Next = temp2.Next;
                    temp2      = null;
                    break;
                }
                else
                {
                    temp1 = temp2;
                    temp2 = temp2.Next;
                }
            }

            // Restructuring the Graph
            TestLibrary.Logging.WriteLine("Restructuring the Graph...");
            temp2 = _vfirst;
            while (temp2 != null)
            {
                temp2.DeleteAdjacentEntry(j);
                temp2 = temp2.Next;
            }

            Edge e1   = null;
            Edge e2   = _efirst;
            Edge temp = null;

            while (e2 != null)
            {
                int v1 = Decimal.Compare(j, e2.v1.Name);
                int v2 = Decimal.Compare(j, e2.v2.Name);
                if ((v1 == 0) || (v2 == 0))
                {
                    if (e2 == _efirst)
                    {
                        temp    = e2;
                        e2      = e2.Next;
                        _efirst = _efirst.Next;
                        temp    = null;
                    }
                    else
                    {
                        temp    = e1;
                        e1.Next = e2.Next;
                        e2      = e2.Next;
                    }
                }
                else
                {
                    e1 = e2;
                    e2 = e2.Next;
                }
            }
        }