Пример #1
0
        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]));
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
 public KantKnoop(Knoop knoop, Kant kant)
 {
     Kant  = kant;
     Knoop = knoop;
 }