Exemple #1
0
        public ActionResult Index()
        {
            LabiryntViewModel model = new LabiryntViewModel(10, 10, 30);

            WyznaczOdleglosci(model);
            WyznaczSciezke(model);


            return(View(model));
        }
Exemple #2
0
        private static void WyznaczOdleglosci(LabiryntViewModel model)
        {
            Queue <Point> kolejka = new Queue <Point>();

            model.Odleglosci[model.Poczatek.X, model.Poczatek.Y] = 0;
            kolejka.Enqueue(model.Poczatek);


            while (kolejka.Count > 0)
            {
                int x, y;

                if (kolejka.Dequeue() is Point punkt && !(punkt.X == model.Koniec.X && punkt.Y == model.Koniec.Y))
                {
                    // gora
                    x = punkt.X;
                    y = punkt.Y - 1;

                    if (y >= 0 && model.Labirynt[x, y] == 1 && model.Odleglosci[x, y] == -1)
                    {
                        kolejka.Enqueue(new Point(x, y));
                        model.Odleglosci[x, y] = model.Odleglosci[punkt.X, punkt.Y] + 1;
                    }

                    // dol
                    x = punkt.X;
                    y = punkt.Y + 1;

                    if (y < model.Labirynt.GetLength(1) && model.Labirynt[x, y] == 1 && model.Odleglosci[x, y] == -1)
                    {
                        kolejka.Enqueue(new Point(x, y));
                        model.Odleglosci[x, y] = model.Odleglosci[punkt.X, punkt.Y] + 1;
                    }

                    // lewo
                    x = punkt.X - 1;
                    y = punkt.Y;

                    if (x >= 0 && model.Labirynt[x, y] == 1 && model.Odleglosci[x, y] == -1)
                    {
                        kolejka.Enqueue(new Point(x, y));
                        model.Odleglosci[x, y] = model.Odleglosci[punkt.X, punkt.Y] + 1;
                    }

                    // prawo
                    x = punkt.X + 1;
                    y = punkt.Y;

                    if (x < model.Labirynt.GetLength(0) && model.Labirynt[x, y] == 1 && model.Odleglosci[x, y] == -1)
                    {
                        kolejka.Enqueue(new Point(x, y));
                        model.Odleglosci[x, y] = model.Odleglosci[punkt.X, punkt.Y] + 1;
                    }
                }