// Generieren einer ersten Bahnplanungslösung mit dem Nearest-Neighbor Verfahren private Druckfolge NearestNeighbor(Graph_ graph, int startNode) { Druckfolge initialLösung = new Druckfolge(); // 1. Startpunkt = Erster Knoten int aktuellerKnoten = startNode; int minimumKnotenNummer = startNode; MarkiereKnoten(aktuellerKnoten, graph); initialLösung.AddPriority((uint)startNode); for (int i = 0; i < graph.GetGraph().Count - 1; i++) { double minimum = MARKIERKOSTEN * 10; for (int j = 0; j < graph.GetGraph().Count; j++) { if (graph.GetGraphElement(aktuellerKnoten, j) < minimum) { minimum = graph.GetGraphElement(aktuellerKnoten, j); minimumKnotenNummer = j; } } // Füge den Knoten mit günstigster Kante in die Druckreihenfolge ein initialLösung.AddPriority((uint)minimumKnotenNummer); initialLösung.SummiereGesamtkosten((uint)minimum); // Aktualisiere den Knoten von dem aus die günstigste Kante gesucht wird aktuellerKnoten = minimumKnotenNummer; MarkiereKnoten(aktuellerKnoten, graph); } return(initialLösung); }
//Markiert einen Knoten, für alle anderen Knoten in den Kostenlisten private static Graph_ MarkiereKnoten(int knoten, Graph_ graph) { for (int i = 0; i < graph.GetGraph().Count; i++) { graph.SetGraph(graph.GetGraphElement(i, knoten) + MARKIERKOSTEN, i, knoten); } graph.SetGraph(graph.GetGraphElement(knoten, knoten) - MARKIERKOSTEN, knoten, knoten); return(graph); }
/* * Markiert die Kante eines Knotens zu sich selbst damit diese nicht als Weg eingetragen wird, * unter Berücksichtigung der Matrixeigenschaft der Liste von Listen. */ private Graph_ MarkiereEigenknoten(Graph_ graph) { for (int i = 0; i < graph.GetGraph().Count; i++) { graph.SetGraph(graph.GetGraphElement(i, i) + MARKIERKOSTEN, i, i); } return(graph); }