public void threadedTraverse(vertex obj) { var sorted = obj.AdjacencyList.OrderBy(x => x.EWeigth); float smallest = 0; foreach (edge v in sorted) { if (!v.Connected.IsVisited) { smallest = v.EWeigth; break; } } foreach (edge e in sorted) { if (e.EWeigth.Equals(smallest)) { parentChild p = new parentChild(); p.Parent = obj; p.Child1 = e; p.I = 0; // Console.WriteLine("Creating thread in threaded traverse"); // Thread t = new Thread(this.dynamicTraverse); //t.Start(p); //Console.WriteLine("Ending thread"); //t.Abort(); this.dynamicTraverse(p); } } }
public void traversel(object parentAndChild) { // Console.WriteLine("IN traversal"); if (!isDynamic) { parentChild obj = (parentChild)parentAndChild; if (obj.Child1.Connected.IsVisited || obj.Child1.Connected.IsDead) { //Console.WriteLine("Child visited"); return; } else { obj.Child1.Connected.IsNewBorn = false; obj.Child1.Connected.Parent = obj.Parent; obj.Child1.Connected.TotalVisits++; obj.Child1.Connected.IsVisited = true; obj.Child1.EWeigth *= 2; var li = obj.Child1.Connected.AdjacencyList; foreach (edge e in li) { if (e.Connected == obj.Parent) { e.EWeigth *= 2; } } iputStimuliObj i = new iputStimuliObj(); i.Source = obj.Child1.Connected; i.Stimuli = obj.I; if (obj.Child1.Connected.Weigth.Equals(obj.I)) { //Console.WriteLine("\n===============================\n"); Console.WriteLine("Moving to dynamic on stilmuli " + obj.I + "\n===================="); this.isDynamic = true; this.dynamicApproach(obj.I); } else if (obj.Child1.Connected.Weigth < obj.I) { //Console.WriteLine("child weigth is less..."+obj.Child1.Connected.Weigth); obj.Child1.Connected.Weigth = (obj.I - obj.Child1.Connected.Weigth); //Console.WriteLine("child weigth is less update..." + obj.Child1.Connected.Weigth); //Console.WriteLine("Edge Weight" + obj.Child1.EWeigth); this.minStimuli(i); } else { //Console.WriteLine("child weigth is greater" + obj.Child1.Connected.Weigth); obj.Child1.Connected.Weigth += obj.I; //Console.WriteLine("child weigth is greater update" + obj.Child1.Connected.Weigth); //Console.WriteLine("Edge Weight" + obj.Child1.EWeigth); this.minStimuli(i); } } } return; }
public void dynamicTraverse(object obj) { parentChild p = (parentChild)obj; if (p.Child1.Connected.IsVisited || p.Child1.Connected.IsDead) { //Console.WriteLine("already visted:" + p.Child1.Connected.Weigth); return; } else { p.Child1.Connected.Parent = p.Parent; p.Child1.Connected.IsNewBorn = false; //Console.WriteLine("Parent is " + p.Parent.Weigth + " child is " + p.Child1.Connected.Weigth+" edge weigth "+p.Child1.EWeigth); p.Child1.Connected.IsVisited = true; p.Child1.EWeigth *= 2; var li = p.Child1.Connected.AdjacencyList; foreach (edge e in li) { if (e.Connected == p.Parent) { e.EWeigth *= 2; } } //Console.WriteLine("Edge in dyamic " + p.Child1.EWeigth); p.Child1.Connected.TotalVisits++; if (p.Child1.Connected.Weigth < p.Parent.Weigth) { p.Child1.Connected.Weigth = (p.Parent.Weigth - p.Child1.Connected.Weigth); } else { p.Child1.Connected.Weigth += p.Parent.Weigth; } this.threadedTraverse(p.Child1.Connected); } }
public void minStimuli(object ob) { iputStimuliObj obj = (iputStimuliObj)ob; var sorted = obj.Source.AdjacencyList.OrderBy(x => x.EWeigth); float smallestWeight = 0; foreach (edge v in sorted) { if (!v.Connected.IsVisited) { smallestWeight = v.EWeigth; break; } } if (smallestWeight.Equals(0)) { return; } foreach (edge c in sorted) { if (c.EWeigth.Equals(smallestWeight)) { parentChild p = new parentChild(); p.I = obj.Stimuli; // Console.WriteLine("obj.Stimuli" + obj.Stimuli); p.Parent = obj.Source; p.Child1 = c; //Console.WriteLine("Creating thread"); //Thread t = new Thread(this.traversel); //t.Start(p); // Console.WriteLine("Ending thread"); //t.Abort(); this.traversel(p); } } }