Programozási ismeretek haladóknak-2/19B
124
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!
több