示例#1
0
    public override Csucs KeresCiklussal(Csucs start)
    {
        Csucs akt = start;

        while (akt != null)
        {
            if (akt.TerminalisE())
            {
                return(akt);
            }
            if (akt.Melyseg >= melysegiKorlat)
            {
                akt = akt.Szulo;
            }
            Csucs gyermek = akt.KovetkezoGyermek();
            if (gyermek == null)
            {
                akt = akt.Szulo;
            }
            else
            {
                akt = gyermek;
            }
        }
        return(null);
    }
示例#2
0
    /// <summary>
    /// Két naprendszer összekötő útat keres meg
    /// </summary>
    /// <param name="startSystem"></param>
    /// <param name="endSystem"></param>
    /// <returns>Az útvonal elemeinek a listájával tér vissza</returns>
    public List <SolarSystem> FindWay(SolarSystem startSystem, SolarSystem endSystem)
    {
        List <SolarSystem> path = new List <SolarSystem>();

        AbsztraktAllapot Szk      = new SolarSystemAllapot(startSystem, endSystem, game.Systems);
        GrafKereso       Gk       = new BackTrack(5);
        Csucs            celcsucs = Gk.Keres(new Csucs(Szk));

        if (celcsucs == null)
        {
            Debug.Log("Nemjó");
        }
        else
        {
            Csucs cs = celcsucs;
            path.Add(cs.allapot.getCurrentSolarSystem());
            while (cs != null)
            {
                cs = cs.Szulo;
                path.Add(cs.allapot.getCurrentSolarSystem());
            }
        }

        return(path);
    }
示例#3
0
    public override Csucs Keres(Csucs akt)
    {
        // ha akt terminális, akkor kész, visszadom őt
        if (akt.TerminalisE())
        {
            return(akt);
        }
        // ha alértem a mélységi korlátot, akkor visszalépés
        if (akt.Melyseg >= melysegiKorlat)
        {
            return(null);
        }
        // elenkező esetben lépek egyet előre
        // azaz legyártom a gyermeket

        Csucs terminalis = null;

        while (terminalis == null)
        {
            Csucs gyermek = akt.KovetkezoGyermek();
            if (gyermek == null)
            {
                return(null);            // ha reku, akkor ez a visszalépés
            }
            terminalis = Keres(gyermek); //reku ameddig, level elemhez nem erunk
        }
        return(terminalis);
    }
示例#4
0
 public Csucs(Allapot allapot, Operator eloallito, Csucs szulo, double heurisztika)
 {
     this.allapot     = allapot;
     this.eloallito   = eloallito;
     this.szulo       = szulo;
     this.heurisztika = heurisztika;
 }
示例#5
0
    public Csucs KovetkezoGyermek()
    {
        AbsztraktAllapot kovAllapot = null;

        while (kovAllapot == null || KorFigyeles(kovAllapot))
        {
            if (legutobbiOp == allapot.OperatorokSzama())
            {
                break;
            }
            kovAllapot = allapot.SzuperOperator(this.legutobbiOp);
            legutobbiOp++;
        }
        if (kovAllapot == null)
        {
            return(null);
        }

        Csucs gyermek = new Csucs(kovAllapot);

        gyermek.allapot     = kovAllapot;
        gyermek.melyseg     = this.melyseg + 1;
        gyermek.szulo       = this;
        gyermek.legutobbiOp = 0;
        return(gyermek);
    }
示例#6
0
    //Konstruktor

    public Csucs(AbsztraktAllapot k)
    {
        this.allapot     = k;
        this.melyseg     = 0;
        this.szulo       = null;
        this.legutobbiOp = 0; // hívás után kell növelni
    }
示例#7
0
    //Medódusok
    bool KorFigyeles(AbsztraktAllapot ujAllapot)
    {
        Csucs cs = this;

        while (cs != null)
        {
            if (cs.allapot.Equals(ujAllapot))
            {
                return(true);
            }
            cs = cs.szulo;
        }
        return(false);
    }
示例#8
0
        public static float RandomEl(Csucs honnan, Csucs hova, List <El> elek)
        {
            var el = elek.FirstOrDefault(e => e.Honnan == honnan && e.Hova == hova);

            if (el == null)
            {
                throw new ArgumentException("Random élbeállítás hiba. Nincs él a két csúcs között");
            }

            var rdn = new Random();

            el.Tavolsag = rdn.Next(1, 11);
            return(el.Tavolsag);
        }
示例#9
0
 public abstract Csucs KeresCiklussal(Csucs start);
示例#10
0
 public abstract Csucs Keres(Csucs start);
示例#11
0
 public El(Csucs honnan, Csucs hova, float tavolsag)
 {
     Honnan   = honnan;
     Hova     = hova;
     Tavolsag = tavolsag;
 }
示例#12
0
    public List <Operator> keres(Problema p, Heurisztika h)
    {
        LinkedList <Csucs> nyiltak = new LinkedList <Csucs>();
        LinkedList <Csucs> zartak  = new LinkedList <Csucs>();

        int aktualisBabu = 500;
        int babu         = Utes(p.kezdo(), p);

        h.heurisztika = h.heur(p.kezdo(), babu);

        nyiltak.AddLast(new Csucs(p.kezdo(), null, null, h.heurisztika));

        while (true)
        {
            if (!nyiltak.Any())
            {
                return(null);
            }

            Csucs kivalasztott = null;

            foreach (Csucs c in nyiltak)
            {
                //0 = király, 1 = huszár 500=rossz
                int cBabu = Utes(c.allapot, p);
                if (cBabu != 500)
                {
                    c.heurisztika = h.heur(c.allapot, cBabu);
                    if ((kivalasztott == null || kivalasztott.heurisztika > c.heurisztika))
                    {
                        kivalasztott = c;
                        aktualisBabu = cBabu;
                    }
                }
                else
                {
                    continue;
                }
            }

            if (kivalasztott.allapot.cel())
            {
                LinkedList <Operator> megoldas = new LinkedList <Operator>();
                for (Csucs c = kivalasztott; c.szulo != null; c = c.szulo)
                {
                    megoldas.AddFirst(c.eloallito);
                }
                return(megoldas.ToList());
            }

            nyiltak.Remove(kivalasztott);
            zartak.AddLast(kivalasztott);

            if (aktualisBabu != 500)
            {
                foreach (Operator o in p.operatorok)
                {
                    if (o.babu == aktualisBabu)
                    {
                        if (o.alkalmazhato(kivalasztott.allapot))
                        {
                            Allapot uj = o.lepes(kivalasztott.allapot);

                            bool voltMar = false;
                            foreach (Csucs c in nyiltak)
                            {
                                if (c.allapot.GetHashCode() == uj.GetHashCode())
                                {
                                    voltMar = true;
                                    break;
                                }
                            }
                            if (!voltMar)
                            {
                                foreach (Csucs c in zartak)
                                {
                                    if (c.allapot.GetHashCode() == uj.GetHashCode())
                                    {
                                        voltMar = true;
                                        break;
                                    }
                                }
                            }

                            if (!voltMar)
                            {
                                nyiltak.AddLast(new Csucs(uj, o, kivalasztott, h.heur(uj, aktualisBabu)));
                            }
                        }
                    }
                    else
                    {
                        continue;
                    }
                }
            }
        }
    }
示例#13
0
        static void Main(string[] args)
        {
            try
            {
                var m1     = new HadtortenetiMuzeum();
                var csucs1 = new Csucs(m1);

                var m2     = new IparmuveszetiMuzeum();
                var csucs2 = new Csucs(m2);

                var m3     = new NeprajziMuzeum();
                var csucs3 = new Csucs(m3);

                var m4     = new SzepmuveszetiMuzeum();
                var csucs4 = new Csucs(m4);

                var m5     = new Babamuzeum();
                var csucs5 = new Csucs(m5);

                m1.HasonloMuzeumokElejereBeszur(m2);
                m1.HasonloMuzeumokElejereBeszur(m3);
                m1.HasonloMuzeumokElejereBeszur(m4);

                var hasonlo = m1.HasonloMuzeumok();

                m1.HasonloMuzeumTorol(m3);

                var hasonlo2 = m1.HasonloMuzeumok();


                var graf = new Graf();
                graf.CsucsHozzaad(csucs1);
                graf.CsucsHozzaad(csucs2);
                graf.CsucsHozzaad(csucs3);
                graf.CsucsHozzaad(csucs4);
                graf.CsucsHozzaad(csucs5);

                var el1_2 = new El(csucs1, csucs2, 10);
                var el1_3 = new El(csucs1, csucs3, 1);
                var el1_4 = new El(csucs1, csucs4, 1);
                var el2_3 = new El(csucs3, csucs2, 2);
                var el2_4 = new El(csucs2, csucs2, 4);
                var el3_4 = new El(csucs3, csucs4, 1);
                var el4_5 = new El(csucs4, csucs5, 1);

                graf.ElHozzaad(el1_2);
                graf.ElHozzaad(el1_3);
                graf.ElHozzaad(el1_4);
                graf.ElHozzaad(el2_3);
                graf.ElHozzaad(el2_4);
                graf.ElHozzaad(el3_4);
                graf.ElHozzaad(el4_5);

                var utvonalGraf = graf.UtvonalGraf(csucs1, csucs5, new[] { csucs3 });

                graf.EleketFrissit(RandomEl);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadKey();
        }
示例#14
0
        static void Main(string[] args)
        {
            #region Látványosságokat és csúcsokat létrehoz
            var budaiVar             = new Var("Budai vár", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var budaivarCsucs        = new Csucs(budaiVar);
            var matyasTemplom        = new Templom("Mátyás Templom", 1800, Latvanyossagok.ErdekessegiSzint.NagyonJó);
            var matyasTemplomCsucs   = new Csucs(matyasTemplom);
            var halaszBastya         = new Kilato("Halászbástya", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var halaszBastyaCsucs    = new Csucs(halaszBastya);
            var citadella            = new Kilato("Citadella", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var citadellaCsucs       = new Csucs(citadella);
            var parlament            = new Egyeb("Parlament", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var parlamentCsucs       = new Csucs(parlament);
            var gellertFurdo         = new Furdo("Gellért fürdő", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var gellertFurdoCsucs    = new Csucs(gellertFurdo);
            var margitSziget         = new Egyeb("Margit Sziget", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var margitSzigetCsucs    = new Csucs(margitSziget);
            var budapestEye          = new Kilato("Budapest Eye", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var budapestEyeCsucs     = new Csucs(budapestEye);
            var bazilika             = new Templom("Szent István Bazilika", 1000, Latvanyossagok.ErdekessegiSzint.NagyonJó);
            var bazilikaCsucs        = new Csucs(bazilika);
            var zsinagoga            = new Templom("Dohány utcai Zsinagóga", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var zsinagogaCsucs       = new Csucs(zsinagoga);
            var hosokTere            = new Egyeb("Hősök tere", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var hosokTereCsucs       = new Csucs(hosokTere);
            var vajdaHunyadVara      = new Var("Vajdahunyad vára", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var vajdaHunyadVaraCsucs = new Csucs(vajdaHunyadVara);
            var szechenyiFurdo       = new Furdo("Széchenyi fürdő", 4500, Latvanyossagok.ErdekessegiSzint.EgészJó);
            var szechenyiFurdoCsucs  = new Csucs(szechenyiFurdo);

            //Várak
            budaiVar.HasonloLatvanyossagHozzaad(vajdaHunyadVara);
            vajdaHunyadVara.HasonloLatvanyossagHozzaad(budaiVar);
            //Egyéb
            parlament.HasonloLatvanyossagHozzaad(margitSziget);
            parlament.HasonloLatvanyossagHozzaad(hosokTere);
            margitSziget.HasonloLatvanyossagHozzaad(parlament);
            margitSziget.HasonloLatvanyossagHozzaad(hosokTere);
            hosokTere.HasonloLatvanyossagHozzaad(parlament);
            hosokTere.HasonloLatvanyossagHozzaad(margitSziget);
            //Fürdők
            gellertFurdo.HasonloLatvanyossagHozzaad(szechenyiFurdo);
            szechenyiFurdo.HasonloLatvanyossagHozzaad(gellertFurdo);
            //Kilátók
            halaszBastya.HasonloLatvanyossagHozzaad(citadella);
            halaszBastya.HasonloLatvanyossagHozzaad(budapestEye);
            citadella.HasonloLatvanyossagHozzaad(halaszBastya);
            citadella.HasonloLatvanyossagHozzaad(budapestEye);
            budapestEye.HasonloLatvanyossagHozzaad(halaszBastya);
            budapestEye.HasonloLatvanyossagHozzaad(citadella);
            //Templomok
            matyasTemplom.HasonloLatvanyossagHozzaad(bazilika);
            matyasTemplom.HasonloLatvanyossagHozzaad(zsinagoga);
            bazilika.HasonloLatvanyossagHozzaad(matyasTemplom);
            bazilika.HasonloLatvanyossagHozzaad(zsinagoga);
            zsinagoga.HasonloLatvanyossagHozzaad(matyasTemplom);
            zsinagoga.HasonloLatvanyossagHozzaad(bazilika);



            #endregion

            #region gráfok
            #region gráf létrehozása, csúcsok felvétele
            Graf graf = new Graf();
            graf.UjCsucs(budaivarCsucs);
            graf.UjCsucs(matyasTemplomCsucs);
            graf.UjCsucs(halaszBastyaCsucs);
            graf.UjCsucs(citadellaCsucs);
            graf.UjCsucs(parlamentCsucs);
            graf.UjCsucs(gellertFurdoCsucs);
            graf.UjCsucs(margitSzigetCsucs);
            graf.UjCsucs(budapestEyeCsucs);
            graf.UjCsucs(bazilikaCsucs);
            graf.UjCsucs(zsinagogaCsucs);
            graf.UjCsucs(hosokTereCsucs);
            graf.UjCsucs(vajdaHunyadVaraCsucs);
            graf.UjCsucs(szechenyiFurdoCsucs);
            #endregion
            #region Élek hozzáadása
            graf.ElHozzaad(new El(budaivarCsucs, matyasTemplomCsucs, 1));
            graf.ElHozzaad(new El(budaivarCsucs, halaszBastyaCsucs, 1));
            graf.ElHozzaad(new El(matyasTemplomCsucs, parlamentCsucs, 3));
            graf.ElHozzaad(new El(halaszBastyaCsucs, matyasTemplomCsucs, 1));
            // graf.ElHozzaad(new El(citadellaCsucs, budaivarCsucs, 5));
            // graf.ElHozzaad(new El(parlamentCsucs, gellertFurdoCsucs, 3));
            graf.ElHozzaad(new El(parlamentCsucs, margitSzigetCsucs, 5));
            graf.ElHozzaad(new El(parlamentCsucs, budapestEyeCsucs, 2));
            graf.ElHozzaad(new El(parlamentCsucs, bazilikaCsucs, 2));
            graf.ElHozzaad(new El(parlamentCsucs, zsinagogaCsucs, 2));
            graf.ElHozzaad(new El(parlamentCsucs, hosokTereCsucs, 4));
            // graf.ElHozzaad(new El(parlamentCsucs, citadellaCsucs, 5));
            graf.ElHozzaad(new El(gellertFurdoCsucs, parlamentCsucs, 3));
            graf.ElHozzaad(new El(margitSzigetCsucs, budapestEyeCsucs, 3));
            graf.ElHozzaad(new El(budapestEyeCsucs, bazilikaCsucs, 1));
            // graf.ElHozzaad(new El(bazilikaCsucs, parlamentCsucs, 2));
            graf.ElHozzaad(new El(bazilikaCsucs, zsinagogaCsucs, 2));
            graf.ElHozzaad(new El(zsinagogaCsucs, hosokTereCsucs, 4));
            graf.ElHozzaad(new El(hosokTereCsucs, vajdaHunyadVaraCsucs, 1));
            graf.ElHozzaad(new El(vajdaHunyadVaraCsucs, szechenyiFurdoCsucs, 1));
            // graf.ElHozzaad(new El(szechenyiFurdoCsucs, parlamentCsucs, 5));
            #endregion


            #endregion


            Console.WriteLine("------------------ FŐ PROGRAM -------");

            Turista turista;
            string  nev;

            Console.WriteLine("Kérlek, add meg a neved!");
            nev = Console.ReadLine();

            turista = new Turista(nev);

            while (true)
            {
                Console.Clear();
                GrafCsucsokFelhasznaloValasztashoz(graf);
                Console.WriteLine("Kedves {0}! Kérlek, válassz kiindulási pontot!\n", turista.Nev);
                int indulas = Convert.ToInt16(Console.ReadLine());
                Console.WriteLine(graf.Csucsok[indulas].Latvanyossag.Nev);

                Console.WriteLine("Kedves {0}! Kérlek, válassz célpontot!\n", turista.Nev);
                int erkezes = Convert.ToInt16(Console.ReadLine());
                Console.WriteLine(graf.Csucsok[erkezes].Latvanyossag.Nev);


                Console.WriteLine();

                // Dijkstra.DijkstraAlgo(GrafToMatrix(graf), 0, 8, graf);
                //TombKiir(GrafToMatrix(graf));
                Map terkep = new Map();

                List <Csucs> utvonal = Utkereses.LegrovidebbUt(terkep, graf.Csucsok[indulas], graf.Csucsok[erkezes], graf);
                turista.Utvonal = utvonal;

                turista.Utvonal.Add(budaivarCsucs);
                turista.Utvonal.Add(parlamentCsucs);


                foreach (Csucs latvany in turista.Utvonal)
                {
                    Console.Write(latvany.Latvanyossag.Nev + " => ");
                }

                Console.WriteLine("VEGE");
                Console.ReadLine();
            }
        }