Exemple #1
0
        static void Main(string[] args)
        {
            //nacti vstup
            int  sirka = Ctecka.PrectiInt();
            int  vyska = Ctecka.PrectiInt();
            char znak;
            Dictionary <char, Seznam <Souradnice> > ht = new Dictionary <char, Seznam <Souradnice> >();

            //Console.ReadLine();
            for (int y = 0; y < vyska; y++)
            {
                for (int x = 0; x < sirka; x++)
                {
                    //vkladam do ht seznamy -> pismeno : pozice
                    Seznam <Souradnice> lss, nova = new Seznam <Souradnice>(new Souradnice(x, y), null);
                    znak = (char)Console.Read();
                    if (ht.TryGetValue(znak, out lss))
                    {
                        lss.Append(nova);
                    }
                    else
                    {
                        ht.Add(znak, nova);
                    }
                }
            }
            Console.ReadLine();
            String text = Console.ReadLine();
            //Console.WriteLine (text);
            //hledej
            Souradnice start = new Souradnice(0, 0), cil;
            int        delka = 0;

            for (int i = text.Length - 1; i >= 0; i--)
            {
                int prac = NajdiMin(text[i], start, out cil, ht);
                if (prac != -1)
                {
                    delka += prac + 1;
                    start  = cil;
                }
            }

            //vypis vystup
            Console.WriteLine(delka);
        }
Exemple #2
0
        //najde minimalni pocet kroku na ceste k zadanemu pismenu ze zadanych souradnic;
        //souradnici pismene vraci v parametru
        static int NajdiMin(char pismeno, Souradnice odkud, out Souradnice kam, Dictionary <char, Seznam <Souradnice> > tabulka)
        {
            kam = odkud;
            Seznam <Souradnice> seznam = null;

            if (tabulka.TryGetValue(pismeno, out seznam))
            {
                Souradnice s = seznam.Value;
                if (s != null)
                {
                    int min = odkud.vzdalenost(s);
                    kam = s;
                    while (seznam.Next != null)
                    {
                        seznam = seznam.Next;
                        s      = seznam.Value;
                        if (s != null)
                        {
                            int vzd = odkud.vzdalenost(s);
                            if (vzd < min)
                            {
                                kam = s;
                                min = vzd;
                            }
                        }
                    }
                    return(min);
                }
                else
                {
                    kam = null;
                    return(-1);
                }
            }
            else
            {
                kam = null;
                return(-1);
            }
        }
Exemple #3
0
 public int vzdalenost(Souradnice b)
 {
     return(Math.Abs(this.X - b.X) + Math.Abs(this.Y - b.Y));
 }