public void BuildGraph() {
		
		// Build Nodes	
		Console.WriteLine("Building Vertices...");
		for(int i=0;i< Nodes; i++) {
			Vertex temp = new Vertex(i);
			if(Vfirst==null) {
			     Vfirst = temp;
			     Vlast = temp;
		        }
		        else {
			     temp.AddVertex(Vlast,temp);
			     Vlast = temp;
                        }
		}
		
		// Build Edges
		Console.WriteLine("Building Edges...");
	
		DateTime time = DateTime.Now;
		Int32 seed = (Int32)time.Ticks;
		Random rand = new Random(seed);
		
		for(int i=0;i< Nodes;i++) {
		    
		    int j = rand.Next(0,Nodes);
		    for(int k=0;k<j;k++) {
		       int v2;
		       while((v2 = rand.Next(0,Nodes))==i);     //select a random node, also avoid self-loops
		       BuildEdge(i,v2);                //build edge betn node i and v2
	              
		       
		    }		
		}
	}
		public Edge(Vertex n1, Vertex n2) {
			v1=n1;
			v2=n2;
			
			int seed = n1.Name+n2.Name;
			Random rand = new Random(seed);
			Weight = rand.Next(0,50);
		}
		public Vertex(int val) {
			Name = val;
			Next = null;
			Adjacent = new Vertex[Graph.Nodes];	
		}
		public void AddVertex(Vertex x, Vertex y) {
			x.Next = y;				
		}
	public void DeleteVertex(Vertex v) {
		if(v == Vlast) {
			Vfirst=null;
			Vlast=null;
			GC.Collect();
			GC.WaitForPendingFinalizers();
			return;
		}
		Vertex temp = v.Next;
		v=null;
		GC.Collect();
		GC.WaitForPendingFinalizers();
		DeleteVertex(temp);
		temp=null;
		GC.Collect();
		GC.WaitForPendingFinalizers();
		
	}