Programozási ismeretek haladóknak-2/19B
Programozási ismeretek haladóknak-2/19B
Lista feltöltése, szétválogatás, összefuttatás listákkal
Listákat tartalmazó tömb
Állat (Nt12-3f1, 1. feladat)
Házi feladat
Oldd meg:
Kollekciók alkalmazása/Dinamikus tömb/Vitorlás, Javít, Kiszámolós
Megjegyzés
Ha megengedjük a halmaz használatát, akkor az Állat feladat c) kérdésére egyszerűbben is válaszolhatunk. Adjuk hozzá a kezdetben üres megoldáshalmazhoz a bejárat mellett elhelyezkedő állatok listáinak elemeit (azaz a szomszédjaik sorszámait). A megoldásból el kell hagynunk az esetlegesen felvett 0-t:
Dim Megoldás As New HashSet(Of Integer)
For Each Bejárati In Állatok(0) ' ciklus a bejárat mellett elhelyezkedő állatokra
For Each Szomszéd In Állatok(Bejárati) ' az aktuális (a bejárat mellett elhelyezkedő) állat szomszédjai
Megoldás.Add(Szomszéd)
Next
Next
Megoldás.Remove(0) ' nem vezet hibához, ha nincs benne
If Megoldás.Count = 0 Then
WriteLine(-1)
Else
a Megoldás halmaz elemeinek kiírása
WriteLine()
End If
Ha a bejáratnál elhelyezkedő állatokat ki akarjuk hagyni a megoldásból, akkor a kiírás előtt vonjuk ki a halmazból az Állatok(0) lista elemeit:
Megoldás.ExceptWith(Állatok(0)) ' halmazművelet!
Ha ismerjük a listákra vonatkozó unió műveletét (lásd a következő videót), akkor még egyszerűbb a megoldás. Határozzuk meg a bejárat mellett elhelyezkedő állatok szomszédjainak az unióját! Az unióképzés a listáknál is elhagyja az ismétlődő elemeket.
Dim Megoldás As New List(Of Integer) ' kezdetben üres lista
For Each Bejárati In Állatok(0) ' ciklus a bejárat mellett elhelyezkedő állatokra
Megoldás = Megoldás.Union(Állatok(Bejárati)).ToList
Next
Megoldás.Remove(0)
If Megoldás.Count = 0 Then
WriteLine(-1)
Else
a Megoldás halmaz elemeinek kiírása
WriteLine()
End If
Illetve a bejártanál elhelyezkedő állatok elhagyása a kiírás előtt:
Megoldás = Megoldás.Except(Állatok(0)).ToList
Készítsd el így is a programokat! Ellenőrizd a megoldásaid a versenyfeladatok webhelyéről letölthető tesztesetekkel!More