class Lama(val name: String, val fellfarbe: String, var groesse: Double, var gewicht: Double) class Lamagraph(){ val spuckmatrix = arrayListOf( arrayListOf(0, 2, 0, 0, 0), arrayListOf(4, 0 ,8, 5, 7), arrayListOf(0, 0, 0, 0, 0), arrayListOf(1, 0, 0, 0, 2), arrayListOf(0, 0, 3, 0, 0) ) // "Gerti", "Susi", "Baldi", "Henni", "Rawi" val lamaliste = arrayListOf( Lama("Gerti", "beige", 1.1, 120.3), Lama("Susi", "braun", 1.3, 130.3), Lama("Baldi", "beige", 1.27, 133.7), Lama("Henni", "weiss", 1.43, 150.1), Lama("Rawi", "beige", 1.38, 148.8) ) val besuchtBzwEvtlInfiziertliste = arrayListOf(false, false, false, false, false) fun tiefensucheAusfuehrenFarbe(startname: String, farbe: String): ArrayList { // Index des Startknotens ermitteln val startknotenIndex = lamaIndexGeben(startname) if (startknotenIndex != -1) { // alle Eintraege in besucht...liste auf false setzen for (index in 0..4) { besuchtBzwEvtlInfiziertliste[index] = false } // Traversierung starten traversierenTiefensucheFarbe(startknotenIndex, farbe) } // Lamas, die besucht worden sind, zurueckgeben return listeUebersetzen() } fun traversierenTiefensucheFarbe(fuerKnotenIndex: Int, farbe: String) { // Knoten als besucht markieren besuchtBzwEvtlInfiziertliste[fuerKnotenIndex] = true // fuer jeden noch nicht besuchten Nachbarn Traversierung durchfuehren for ((index, anspuckzahl) in spuckmatrix[fuerKnotenIndex].withIndex()) { if (anspuckzahl > 0 && besuchtBzwEvtlInfiziertliste[index] == false) { if (lamaliste[index].fellfarbe == farbe) { traversierenTiefensucheFarbe(index, farbe) } } } } fun lamaIndexGeben(lamaname: String): Int { for ((index, lama) in lamaliste.withIndex()) { if (lama.name == lamaname) { return index } } return -1 } fun listeUebersetzen(): ArrayList { val ergebnisliste = ArrayList() for ((index, eintrag) in besuchtBzwEvtlInfiziertliste.withIndex()) { if (eintrag == true) { ergebnisliste.add(lamaliste[index]) } } return ergebnisliste } }