Algoritmus Dijkstra – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Algoritmus Dijkstra – .NET – Fórum – Programujte.comAlgoritmus Dijkstra – .NET – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
7. 11. 2021   #1
-
0
-

Dobrý den, tak jsem narazil na problém. Kód funguje, dokud se nedostane do levého horního rohu bludiště, kde skončí přetečením na X souřadnici. Nechápu proč, když je tam pevně nastavená podmínka, že souřadnice musí být větší než nula. Něco mi asi uniká. Dík za každý tip.

{ 
        // Prostředí, ve kterém hledáme cestu (1 = překážka, 0 = volná plocha)
        static int[,] prostredi = new int[12, 12]
        {
            { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
            { 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1 },
            { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1 },
            { 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1 },
            { 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1 },
            { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1 },
            { 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1 },
            { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1 },
            { 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1 },
            { 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1 },
            { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
            { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
        };
        
        static Bod pocatecniBod = new Bod(4, 7, 2);
        static Bod cilovyBod = new Bod(8, 9, int.MaxValue);
        List<Bod> souradniceList = new List<Bod>();
        
        static void Main(string[] args)
        {
            prostredi[8, 9] = int.MaxValue;
            Queue<Bod> souradnice = new Queue<Bod>();
            
           
            int maxVal = 2;
            souradnice.Enqueue(pocatecniBod);

            do
            {
                for (int i = 0; i < 4; i++)
                {
                    if ((prostredi[pocatecniBod.X, pocatecniBod.Y - 1] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
                    {
                        prostredi[pocatecniBod.X, pocatecniBod.Y - 1] = maxVal;
                        pocatecniBod.Y = pocatecniBod.Y - 1;
                        souradnice.Enqueue(pocatecniBod);
                        
                            
                    }
                    if ((prostredi[pocatecniBod.X - 1, pocatecniBod.Y] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
                    {
                        prostredi[pocatecniBod.X - 1, pocatecniBod.Y] = maxVal;
                        pocatecniBod.X = pocatecniBod.X - 1;
                        souradnice.Enqueue(pocatecniBod);
                        

                    }
                    if ((prostredi[pocatecniBod.X, pocatecniBod.Y + 1] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
                    {
                        prostredi[pocatecniBod.X, pocatecniBod.Y + 1] = maxVal;
                        pocatecniBod.Y = pocatecniBod.Y + 1;
                        souradnice.Enqueue(pocatecniBod);
                        

                    }
                    if ((prostredi[pocatecniBod.X + 1, pocatecniBod.Y] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
                    {
                        prostredi[pocatecniBod.X + 1, pocatecniBod.Y] = maxVal;
                        pocatecniBod.X = pocatecniBod.X - 1;
                        souradnice.Enqueue(pocatecniBod);
                        

                    }
                    maxVal++;
                    pocatecniBod = souradnice.Dequeue();
                    
                    //Console.WriteLine(pocatecniBod.X.ToString());
                    //Console.WriteLine(pocatecniBod.Y.ToString());
                    Console.ReadKey();
                    Vykresli();
                }
            }while (pocatecniBod.Hodnota != int.MaxValue);
        }

        static void Vykresli()
        {
            Console.Clear();
            for (int j = 0; j <= 11 ; j++)
            {
                for (int i = 0; i <= 11; i++)
                {
                    Console.Write(prostredi[i, j] + ", ");
                }
                Console.WriteLine();
            }
        }
    }


struct Bod
    {
        public int X { get;  set; }
        public int Y { get;  set; }
        public int Hodnota { get; set; }

        public Bod(int x, int y, int hodnota) : this()
        {
            X = x;
            Y = y;
            Hodnota = hodnota;
        }
        public override string ToString()
        {
            return "X: " + X + ", Y: " + Y;
        }
    }
Nahlásit jako SPAM
IP: 178.22.113.–
Kit+15
Guru
7. 11. 2021   #2
-
0
-

#1 KARLOSCZ1979
Přehoď pořadí podmínek v každém ifu.

Nahlásit jako SPAM
IP: 213.175.43.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
BDS+3
Věrný člen
7. 11. 2021   #3
-
+1
-
Zajímavé

#1 KARLOSCZ1979
nechce se mi to zkoušet, ale letmým pohledem mě vizuálně nesedí tahle část

if ((prostredi[pocatecniBod.X + 1, pocatecniBod.Y] == 0) && (pocatecniBod.X > 0) && (pocatecniBod.Y > 0))
                    {
                        prostredi[pocatecniBod.X + 1, pocatecniBod.Y] = maxVal;
                        pocatecniBod.X = pocatecniBod.X - 1; //<< tady bych zkusil dát +1
                        souradnice.Enqueue(pocatecniBod);
                        

                    }
Nahlásit jako SPAM
IP: 185.69.68.–
W11 :)
8. 11. 2021   #4
-
0
-

Čumím na to jak vrána do hodin a nevidím.... Děkuju!

Nahlásit jako SPAM
IP: 178.22.113.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 59 hostů

Podobná vlákna

Vytvoření grafu - Dijkstra — založil Lukáš

Algoritmus — založil LuckaH

Algoritmus — založil Jirina.K

C++ algoritmus — založil silent

Algoritmus — založil RePRO

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý