示例#1
0
        // 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);
        }
示例#2
0
 //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);
 }
示例#3
0
 /*
  * 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);
 }