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(); }
public void GebeAus(Boolean schreibeWirklich, Netzplan netzplan, string dateiName) { if (schreibeWirklich) { this.SchreibeDotFile(netzplan, dateiName); } }
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(); }
// 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(); }
private IEnumerable<string> GenerateStrecken(Netzplan netzplan, Haltestelle haltestelle) { return haltestelle.Strecken.Select(strecke => string.Format(streckenformat, strecke.Linienname, strecke.Zielhaltestellenname)); }
private String GenerateCSharp(Netzplan netzplan) { var sb = new StringBuilder().AppendFormat(netzplanformat, this.GenerateCSharpHalteStellen(netzplan)); return sb.ToString(); }
public void SchreibeDotFile(Netzplan netzplan, string dateiName) { File.WriteAllLines(dateiName, new[] { this.GenerateDot(netzplan) }); }
public Netzplan BerechneNetzplan() { var netzplan = new Netzplan(); netzplan.Haltestellen = this.BerechneHalteStellen().ToArray(); return netzplan; }
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; }
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"); } }
private void AssertPathSearchOutcome(Netzplan netzplan, int expectedNumberOfPaths) { this.AssertPathSearchOutcome(netzplan, StartHaltestellenname, ZielHaltestellenname, expectedNumberOfPaths); }
public Netzplan Netzplan_berechnen() { var netzplan = new Netzplan { Haltestellen = this.BerechneHalteStellen().ToArray() }; return netzplan; }