2026. június 25., csütörtök

Mélységi keresés logisztikai gráfbejáró program

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