예제 #1
0
        public ILejátszható[] Elsőelemre(LáncoltLista <ILejátszható> tartalom)
        {
            ListaElem <ILejátszható> aktualis = tartalom.Fej;

            //6 stílust használok, ezáltal 6 elemű a tömbböm, amibe eltárolom az első elemre vonatkozó referenciákat.
            string[] stilusok     = new string[] { "Családias", "Mulatós", "Rock", "Elektronikus", "Romantikus", "Akció" };
            int      stilus_index = 0;
            int      db           = stilusok.Length;

            ILejátszható[] elsőelemekreRef = new ILejátszható[db];
            int            elsőre_index    = 0;

            while (stilus_index < db && aktualis != null)
            {
                if (aktualis.Következő == null && elsőelemekreRef[elsőre_index] == null)
                {
                    stilus_index += 2;
                    aktualis      = tartalom.Fej;
                    elsőelemekreRef[elsőre_index++] = aktualis.Érték;
                }
                else if (aktualis.Érték.Stílus == stilusok[stilus_index])
                {
                    elsőelemekreRef[elsőre_index++] = aktualis.Érték;
                    stilus_index++;
                }
                aktualis = aktualis.Következő;
            }
            return(elsőelemekreRef);
        }
예제 #2
0
        //Az elsőelemek megtalálása: egy int db változóba eltárolom a tartalom méretét, majd a egy tmp tömböt ezzel a mérettel inicializálok. Ebbe a tmp tömbbe kerülnek bele a referenciák.
        //A megvalósítás:Először feltöltöm a tömböt a tartalom összes elemével, majd  deklarálok egy index változót ami a legelső elemre mutat, és ezt is használom az if első vizsgálandó elemének indexelésére.
        //Amíg a soron következő elemek stílusa azonos az elsővel, addig azokat törlöm, ha különböznek, akkor az index értéket fölülírom az i-vel így az az éppen aktuális elemre fog mutatni, aminek pont eltér a stílusa
        //az eddig vizsgálttól. Ezután folytatódik a ciklus és vizsgálja, hogy a következő elem azonos-e az index-edik elem stílusával és ha igen, törli, ha nem átlépteti az indexet az aktuális elemre és így tovább.


        public void TartalomÖsszeállítás(LáncoltLista <ILejátszható> tartalom)
        {
            int stilusDb         = 0;
            int támogatott_index = 0;

            try
            {
                stilusDb = Db();
            }
            catch (TulnagyASzam e)
            {
                Console.WriteLine(e.Message);
                TartalomÖsszeállítás(tartalom);
            }

            Console.WriteLine();
            string[] támogatottStílusok = new string[stilusDb];     //meghívom a műfajra kiválogatott listán ami már csak azokat a műfajokat tartalmazza amiket a felhasz engedett
            bool     kilep = false;

            while (kilep == false)
            {
                try
                {
                    támogatottStílusok = TámogatottStílusok(stilusDb, támogatott_index);
                    kilep = true;
                }
                catch (NemLetezoStilus e)
                {
                    Console.WriteLine(e.Message);
                }
            }

            Console.WriteLine();
            int műsorhossz = 0;

            Dictionary <string, List <ILejátszható> > válogatottTartalom = Válogatás(tartalom, támogatottStílusok);
            LáncoltLista <ILejátszható> osszefuzott = new LáncoltLista <ILejátszható>();

            osszefuzott = ElejereOsszeFuzes(válogatottTartalom);
            int meret  = osszefuzott.Count();
            int marker = 0;

            ILejátszható[] eredmeny = new ILejátszható[meret];
            //osszefuzott.BackTrack()

            Console.WriteLine();

            foreach (var item in osszefuzott)
            {
                Console.WriteLine(item);
            }
        }
예제 #3
0
        //public void BackTrack(ref int limit, ref int totalcost, ref int marker, ILejátszható[] eredmeny)
        //public void BackTrack(ref int műsorhossz, ref int totalcost, ref int marker, ILejátszható[] eredmeny)
        //{
        //    ListaElem<ILejátszható> start = null;
        //    BackTrack(fej, 0, limit, 0, eredmeny, ref limit, ref totalcost, ref marker, start);
        //    BackTrack(fej,0,műsorhossz,)
        //    //BackTrack(fej,)
        //}
        private void BackTrack(ListaElem <ILejátszható> fej, int szint, int remaining, int cost, ILejátszható[] eredmeny, ref int pool, ref int totalcost, ref int marker, ILejátszható before)
        {
            ListaElem <ILejátszható> mappoint = new ListaElem <ILejátszható>(before);
            int temptime;
            int tempcost;

            while (fej != null)
            {
                mappoint.Érték = fej.Érték;
                temptime       = remaining - fej.Érték.Hossz;
                tempcost       = cost + fej.Érték.SzerzőiJogdíj;
                if (temptime >= 0)
                {
                    BackTrack(fej.Következő, szint + 1, temptime, tempcost, eredmeny, ref pool, ref totalcost, ref marker, mappoint);
                    if (temptime < pool)
                    {
                        pool      = temptime;
                        totalcost = tempcost;
                        marker    = szint;
                        Eredmeny(szint, eredmeny, mappoint);
                    }
                    else if (temptime == pool && tempcost < totalcost)
                    {
                        totalcost = tempcost;
                        marker    = szint;
                        Eredmeny(szint, eredmeny, mappoint);
                    }
                }
            }
        }