Kedves Diákjaim, ha még maradt valaki aki bírja, továbblépek, remélem nem üldözöm el a maradék kitartó diákot, ezzel az algoritmussal. Ez a program a mélységi keresés (DFS) algoritmus egy mélységi keresés . Segít modellezni és feltérképezni az áruk útját az ellátási láncban.A logisztikai gráfbejáró program
------------
class LogisztikaiHalozat:
def __init__(self):
# Szomszédsági lista a gráf ábrázolására (csomópont -> [szomszédok])
self.graf = {}
# Új logisztikai csomópont (raktár/elosztó) hozzáadása
def csomopont_hozzaadas(self, csomopont):
if csomopont not in self.graf:
self.graf[csomopont] = []
# Útvonal (út vagy szállítószalag) definiálása két csomópont között
def utvonal_hozzaadas(self, honnan, hova):
self.csomopont_hozzaadas(honnan)
self.csomopont_hozzaadas(hova)
# Irányított gráf: a forrásból vezet út a cél felé
if hova not in self.graf[honnan]:
self.graf[honnan].append(hova)
# Mélységi keresés (DFS) rekurzív megvalósítása
def letezik_szallitasi_utvonal(self, kezdo_raktar, cel_csomopont):
# Halmaz a már meglátogatott csomópontok követésére (végtelen ciklus elkerülése)
meglatogatott = set()
def dfs_kereso(aktualis_csomopont):
# Ha elértük a cél csomópontot, igaz értékkel térünk vissza
if aktualis_csomopont == cel_csomopont:
return True
meglatogatott.add(aktualis_csomopont)
# Bejárjuk az összes szomszédot
szomszedok = self.graf.get(aktualis_csomopont, [])
for szomszed in szomszedok:
if szomszed not in meglatogatott:
if dfs_kereso(szomszed):
return True
return False
# Ellenőrizzük, hogy létezik-e egyáltalán a kezdő csomópont a hálózatban
if kezdo_raktar not in self.graf:
return False
return dfs_kereso(kezdo_raktar)
# --- Tesztelés és alkalmazás ---
if __name__ == "__main__":
hazar_halozat = LogisztikaiHalozat()
# Logisztikai kapcsolatok felépítése Nyíregyháza és egyéb csomópontok között
hazar_halozat.utvonal_hozzaadas("Nyíregyháza_Központi", "Debrecen_Elosztó")
hazar_halozat.utvonal_hozzaadas("Debrecen_Elosztó", "Miskolc_Raktár")
hazar_halozat.utvonal_hozzaadas("Debrecen_Elosztó", "Budapest_Fő_Hub")
hazar_halozat.utvonal_hozzaadas("Miskolc_Raktár", "Kassa_Terminal")
hazar_halozat.utvonal_hozzaadas("Budapest_Fő_Hub", "Győr_Logisztika")
hazar_halozat.utvonal_hozzaadas("Győr_Logisztika", "Bécs_Depo")
# Érkezhet-e áru Nyíregyházáról közvetve vagy közvetlenül Bécsbe?
cel_elerheto = hazar_halozat.letezik_szallitasi_utvonal("Nyíregyháza_Központi", "Bécs_Depo")
print(f"Eljuthat-e áru Nyíregyházáról Bécsbe? {'IGEN' if cel_elerheto else 'NEM'}")
# Eljuthat-e áru Kassáról Budapestre?
kassa_bp = hazar_halozat.letezik_szallitasi_utvonal("Kassa_Terminal", "Budapest_Fő_Hub")
print(f"Eljuthat-e áru Kassáról Budapestre? {'IGEN' if kassa_bp else 'NEM'}")
-----------------
Eljuthat-e áru Nyíregyházáról Bécsbe? IGEN
Eljuthat-e áru Kassáról Budapestre? NEM
------------
Rekurzió (dfs_kereso): Az emelt szintű vizsgákon gyakran előforduló algoritmus, amely a hívási verem (Call Stack) segítségével könnyen átláthatóvá teszi a gráfok feltérképezését.set() használata: A halmaz hatékony adattároló a már meglátogatott csomópontok (uzsorák/raktárak) nyilvántartására, amivel megakadályozható a körkörös útvonalakból adódó végtelen ciklus.Irányított gráf: Megmutatja, hogy az éleknek van iránya, azaz az egyik irányú logisztikai tranzakció nem jelenti automatikusan az áru visszaszállítási lehetőségét.
----------
Futtatás; https://onecompiler.com/python#draft-tdxd
Nincsenek megjegyzések:
Megjegyzés küldése