} // End Sub MatrixSorterTest public static void SimpleMatrixSorterTest() { MatrixSorter sorter = new MatrixSorter(5); sorter.AddVertex(0); sorter.AddVertex(1); sorter.AddVertex(2); sorter.AddVertex(3); sorter.AddVertex(4); sorter.AddEdge(2, 3); // 3 hängt von 2 ab sorter.AddEdge(0, 1); // 1 hängt von 0 ab int[] res = sorter.Sort(); // res = res.Reverse().ToArray(); System.Console.WriteLine(res); } // End Sub SimpleMatrixSorterTest
public static void MatrixSorterTest() { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); System.Collections.Generic.Dictionary <string, int> dict = new System.Collections.Generic.Dictionary <string, int>( System.StringComparer.InvariantCultureIgnoreCase ); System.Collections.Generic.List <TopologicObject> ls = new System.Collections.Generic.List <TopologicObject>(); ls.Add(new TopologicObject("bar")); ls.Add(new TopologicObject("foo")); ls.Add(new TopologicObject("foobar") .DependsOn("foo").DependsOn("bar") ); ls.Add(new TopologicObject("omg").DependsOn("foo")); for (int i = 0; i < ls.Count; ++i) { ls[i].Index = i; dict.Add(ls[i].Name, i); } // Next i for (int i = 0; i < ls.Count; ++i) { for (int j = 0; j < ls[i].Dependencies.Count; ++j) { int key = dict[ls[i].Dependencies[j].Name]; ls[i].Dependencies[j].Index = key; } // Next j } // Next i MatrixSorter sorter = new MatrixSorter(ls.Count); for (int i = 0; i < ls.Count; ++i) { sorter.AddVertex(i); } // Next i for (int i = 0; i < ls.Count; ++i) { for (int j = 0; j < ls[i].Dependencies.Count; ++j) { sorter.AddEdge(ls[i].Dependencies[j].Index, i); // i depends on Dependency[j] } // Next j } // Next i int[] res = sorter.Sort(); string[] sres = new string[res.Length]; for (int i = 0; i < sres.Length; ++i) { sres[i] = ls[res[i]].Name; } // Next i sw.Stop(); long ems = sw.ElapsedMilliseconds; System.Console.WriteLine($"Duration Matrix:\t{ems}"); // res = res.Reverse().ToArray(); // System.Console.WriteLine(sres); } // End Sub MatrixSorterTest