コード例 #1
0
        public void Alle_Pfade_bestimmen(Netzplan netzplan, string starthaltestellenname, string zielhaltestellenname)
        {
            this.netzplan = netzplan;
             if (this.netzplan == null)
             {
            throw new ArgumentNullException("netzplan");
             }

             this.starthaltestelle = this.FindHaltestelle(starthaltestellenname);
             if (this.starthaltestelle == null)
             {
            throw new InvalidOperationException("Starthaltestelle nicht gefunden");
             }

             this.zielhaltestelle = FindHaltestelle(zielhaltestellenname);
             if (this.zielhaltestelle == null)
             {
            throw new InvalidOperationException("Zielhaltestelle nicht gefunden");
             }

             var initialKandidat = new PfadKandidat(starthaltestelle);

             this.StarteSuche(initialKandidat, numberOfWorkers: 7);
             this.StarteAusgabe();

             this.OutputEndOfSteam();
        }
コード例 #2
0
 public void GebeAus(Boolean schreibeWirklich, Netzplan netzplan, string dateiName)
 {
     if (schreibeWirklich)
     {
         this.SchreibeDotFile(netzplan, dateiName);
     }
 }
コード例 #3
0
        private string GenerateCSharpHalteStellen(Netzplan netzplan)
        {
            var sb = new StringBuilder();
            foreach (var haltestelle in netzplan.Haltestellen)
            {
                var streckenString = string.Join("," + Environment.NewLine, GenerateStrecken(netzplan, haltestelle).ToArray());
                sb.AppendFormat(halteStellenformat, haltestelle.Name, streckenString);
            }

            return sb.ToString();
        }
コード例 #4
0
        // shamelessly stolen from Pfadbestimmung
        // cut and paste strings to http://graphviz-dev.appspot.com/
        private String GenerateDot(Netzplan netzplan)
        {
            var sb = new StringBuilder().AppendLine("digraph Netzplan {");

            foreach (var haltestelle in netzplan.Haltestellen)
            {
                foreach (var strecke in haltestelle.Strecken)
                {
                    sb.AppendFormat("  \"{0}\" -> \"{1}\" [label=\"{2}\"];", haltestelle.Name, strecke.Zielhaltestellenname, strecke.Linienname);
                    sb.AppendLine();
                }
            }

            sb.AppendLine("}");
            return sb.ToString();
        }
コード例 #5
0
 private IEnumerable<string> GenerateStrecken(Netzplan netzplan, Haltestelle haltestelle)
 {
     return haltestelle.Strecken.Select(strecke => string.Format(streckenformat, strecke.Linienname, strecke.Zielhaltestellenname));
 }
コード例 #6
0
 private String GenerateCSharp(Netzplan netzplan)
 {
     var sb = new StringBuilder().AppendFormat(netzplanformat, this.GenerateCSharpHalteStellen(netzplan));
     return sb.ToString();
 }
コード例 #7
0
 public void SchreibeDotFile(Netzplan netzplan, string dateiName)
 {
     File.WriteAllLines(dateiName, new[] { this.GenerateDot(netzplan) });
 }
コード例 #8
0
 public Netzplan BerechneNetzplan()
 {
     var netzplan = new Netzplan();
     netzplan.Haltestellen = this.BerechneHalteStellen().ToArray();
     return netzplan;
 }
コード例 #9
0
        private Netzplan GenerateLinearNetzplan(Int32 numberOfHaltestellen)
        {
            const string linienName = "U1";
            var netzplan = new Netzplan()
            {
                Haltestellen = new Haltestelle[numberOfHaltestellen]
            };
            netzplan.Haltestellen[0] = new Haltestelle { Name = StartHaltestellenname };

            // loop over all intermideate terminals
            for (int i = 1; i < numberOfHaltestellen; i++)
            {
                var source = netzplan.Haltestellen[i - 1];
                var targetName = String.Format("H{0}", i);
                if (i == numberOfHaltestellen - 1)
                {
                    targetName = ZielHaltestellenname;
                }

                source.Strecken = new[]
              {
                  new Strecke { Linienname = linienName, Zielhaltestellenname = targetName }
              };
                netzplan.Haltestellen[i] = new Haltestelle { Name = targetName, Strecken = new Strecke[0] };
            }

            return netzplan;
        }
コード例 #10
0
        private void AssertPathSearchOutcome(Netzplan netzplan, string start, string ziel, int expectedNumberOfPaths)
        {
            var sw = new Stopwatch();
            var target = new Pfadbestimmung();
            Int32 gefundenePfade = 0;
            target.OnPfad += (pfad) =>
            {
                if (pfad != null)
                {
                    gefundenePfade++;
                    Assert.AreEqual(ziel, pfad.Strecken.Last().Zielhaltestellenname, "Ziel stimmt nicht");
                    Assert.AreEqual(start, pfad.Starthaltestellenname, "Start stimmt nicht");
                }
            };

            sw.Start();
            target.Alle_Pfade_bestimmen(netzplan, start, ziel);
            var elapsed = sw.Elapsed;
            Console.WriteLine("{0} Pfade gefunden in {1} ({2} pfade/ms)", gefundenePfade, elapsed, gefundenePfade / elapsed.TotalMilliseconds);
            if (expectedNumberOfPaths >= 0)
            {
                Assert.AreEqual(expectedNumberOfPaths, gefundenePfade, "Anzahl Pfade passt nicht");
            }
        }
コード例 #11
0
 private void AssertPathSearchOutcome(Netzplan netzplan, int expectedNumberOfPaths)
 {
     this.AssertPathSearchOutcome(netzplan, StartHaltestellenname, ZielHaltestellenname, expectedNumberOfPaths);
 }
コード例 #12
0
 public Netzplan Netzplan_berechnen()
 {
     var netzplan = new Netzplan { Haltestellen = this.BerechneHalteStellen().ToArray() };
     return netzplan;
 }