private KantKnoop GetShortestArcUsingMatrixTable(DataTable matrixTable) { int huidigeKortsteLengte = int.MaxValue; List <Knoop> dichtbijsteKnopen = new List <Knoop>(); List <Kant> kortsteKanten = new List <Kant>(); foreach (Knoop knoop in geselecteerdeKnopen) { string columnName = knoop.Identifier; foreach (DataRow dataRow in matrixTable.Rows) { // Als er waarde in de cel van deze kolom zit if (dataRow[columnName] is Kant) { Kant kant = (Kant)dataRow[columnName]; // Nieuwe laagste waarde gevonden, reset huidige lijst if (huidigeKortsteLengte > kant.Lengte) { dichtbijsteKnopen.Clear(); kortsteKanten.Clear(); } // Mag de lijst in if (huidigeKortsteLengte >= kant.Lengte) { huidigeKortsteLengte = kant.Lengte; if (knoop.Identifier == kant.KnoopA.Identifier) { dichtbijsteKnopen.Add(kant.KnoopB); } else { dichtbijsteKnopen.Add(kant.KnoopA); } kortsteKanten.Add(kant); } } } } // (bij meerdere ‘laagste waarden’ kies er één uit) int index = random.Next(0, dichtbijsteKnopen.Count); if (kortsteKanten.Count <= 0) { return(new KantKnoop(null, null)); } else { return(new KantKnoop(dichtbijsteKnopen[index], kortsteKanten[index])); } }
public DataTable BuildMatrixTable(string tableName, List <Knoop> knopen, List <Kant> kanten) { DataTable table = new DataTable(tableName); for (int i = 0; i < knopen.Count; i++) { table.Columns.Add(knopen[i].Identifier, typeof(Kant)); } table.Columns.Add("rowName", typeof(string)); foreach (Knoop knoop in knopen) { List <Kant> matches = kanten.FindAll(k => k.KnoopA.Identifier == knoop.Identifier || k.KnoopB.Identifier == knoop.Identifier); Kant[] slots = new Kant[knopen.Count]; for (int i = 0; i < slots.Length; i++) { slots[i] = null; } foreach (Kant kant in matches) { string targetId = kant.KnoopA.Identifier; if (targetId == knoop.Identifier) { targetId = kant.KnoopB.Identifier; } int index = knopen.FindIndex(k => k.Identifier == targetId); slots[index] = kant; } table.Rows.Add(slots); table.Rows[table.Rows.Count - 1]["rowName"] = knoop.Identifier; } return(table); }
public KantKnoop(Knoop knoop, Kant kant) { Kant = kant; Knoop = knoop; }