Anonymní profil Jowany – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Jowany – Programujte.comAnonymní profil Jowany – Programujte.com

 

Příspěvky odeslané z IP adresy 217.170.96.–

Jowany
Python › Pathfiding ve 2D poli
29. 11. 2012   #167828

Zdravím,

zkouším dát dohromady algoritmus vyhledávající nejkratší cestu ze zadaného bodu A do zadaného bodu B ve dvoudimenzionálním seznamu. Našel jsem pár algoritmů, které pracují pomoci slovníků stylem Bod: [Sousední body], ale to bych musel všechny body značící průchozí cesty pojmenovat, ale je zbytečné každé pole pojmenovávat když je pojmenováno díky souřadnicím.

 Pole:

r1 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
r2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
r3 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
r4 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
r5 = [1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1]
r6 = [1,2,1,1,1,1,2,1,1,1,1,1,2,1,1,2,1,1,1,1,1,2,1,1,1,1,2,1]
r7 = [1,2,1,1,1,1,2,1,1,1,1,1,2,1,1,2,1,1,1,1,1,2,1,1,1,1,2,1]
r8 = [1,2,1,1,1,1,2,1,1,1,1,1,2,1,1,2,1,1,1,1,1,2,1,1,1,1,2,1]
r9 = [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1]
r10 = [1,2,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,2,1]
r11 = [1,2,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,2,1]
r12 = [1,2,2,2,2,2,2,1,1,2,2,2,2,1,1,2,2,2,2,1,1,2,2,2,2,2,2,1]
r13 = [1,1,1,1,1,1,2,1,1,1,1,1,0,1,1,0,1,1,1,1,1,2,1,1,1,1,1,1]
r14 = [0,0,0,0,0,1,2,1,1,1,1,1,0,1,1,0,1,1,1,1,1,2,1,0,0,0,0,0]
r15 = [0,0,0,0,0,1,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0]
r16 = [0,0,0,0,0,1,2,1,1,0,1,1,1,0,0,1,1,1,0,1,1,2,1,0,0,0,0,0]
r17 = [1,1,1,1,1,1,2,1,1,0,1,0,0,0,0,0,0,1,0,1,1,2,1,1,1,1,1,1]
r18 = [0,0,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,0,0,0,0]
r19 = [1,1,1,1,1,1,2,1,1,0,1,0,0,0,0,0,0,1,0,1,1,2,1,1,1,1,1,1]
r20 = [0,0,0,0,0,1,2,1,1,0,1,1,1,1,1,1,1,1,0,1,1,2,1,0,0,0,0,0]
r21 = [0,0,0,0,0,1,2,1,1,0,0,0,0,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0]
r22 = [0,0,0,0,0,1,2,1,1,0,1,1,1,1,1,1,1,1,0,1,1,2,1,0,0,0,0,0]
r23 = [1,1,1,1,1,1,2,1,1,0,1,1,1,1,1,1,1,1,0,1,1,2,1,1,1,1,1,1]
r24 = [1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1]
r25 = [1,2,1,1,1,1,2,1,1,1,1,1,2,1,1,2,1,1,1,1,1,2,1,1,1,1,2,1]
r26 = [1,2,1,1,1,1,2,1,1,1,1,1,2,1,1,2,1,1,1,1,1,2,1,1,1,1,2,1]
r27 = [1,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1]
r28 = [1,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,1]
r29 = [1,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,1]
r30 = [1,2,2,2,2,2,2,1,1,2,2,2,2,1,1,2,2,2,2,1,1,2,2,2,2,2,2,1]
r31 = [1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1]
r32 = [1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1]
r33 = [1,9,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1]
r34 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
r35 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
r36 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

pole = [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30,r31,r32,r33,r34,r35,r36]

Čísla 2 a 0 značí cesty, číslo 1 stěny, jedná se o pacmana. Napadlo mě, používat každý jeden prvek pole jako tuple o dvou prvcích - souřadnicích pro pole[y][x] tedy tuple (y,x) a k tomu přiřadit vždy daný počet dalších tuple, podle toho s kolika cestami sousedí. 

Jedná se hlavně o AI duchů, aby nechodili náhodně a dlouhými cestami, ale nejkratší cestou. Jestli vás napadá nějaké elegantní řešení, rady a další, budu jen rád. (Různé známé algoritmy jsem už zkoušel, tedy všechny které jsem našel, ale nepovedlo se mi je nějak sladit s kódem)

Docela dost mě napadá Dijkstrův algoritmus, ale nedaří se mi nějak aplikovat pro dané pole.

Jowany
C / C++ › Můj začátečnický problém
16. 4. 2010   #127167

Tak jo, mám to hotové a jede to. Akorát jsem musel upravit proměnnou jednotka_casu1 a jednotka_casu2 - ty dělali problém.

Jowany
C / C++ › Můj začátečnický problém
16. 4. 2010   #127102

Chybičky opraveny, ale stále to za prvním scanf ukončuje. Budu si to muset projít postupně, krok po kroce + jsem tam našel hafo chyb...

Jowany
C / C++ › Můj začátečnický problém
15. 4. 2010   #127084

Jinak teď jsem to dokončil, tak tady je celý zdroják



#include <iostream>

using namespace std;

int minuta, sekunda, hodina, cislo_cas;
char jednotka_casu1, jednotka_casu2, obnoveni, hodiny, minuty, sekundy;
int navrat = 0;
int a = 3600;
int b = 60;

int main()
{
do
{
printf("Vyberte, z jake jednotky chcete prevadet (hodiny, minuty, sekundy)\n");
printf("Prosim zadejte presne jak je na vyber v zavorce: ");
scanf("%d", &jednotka_casu1);
printf("Zadejte cislo, ktere chcete prevest: ");
scanf("%d", &cislo_cas);
printf("Zadejte na jake jednotky chcete prevadet (hodiny, minuty, sekundy)\n");
printf("Prosim zadejte presne jak je na vyber v zavorce: ");
scanf("%d", &jednotka_casu2);

if((jednotka_casu1 == hodiny) && (jednotka_casu2 == sekundy))
{
while(cislo_cas != 0)
{
(sekunda = (cislo_cas + a));
printf("Vysledek je %i sekund\n", sekunda);
}
}
else if((jednotka_casu1 == hodiny) && (jednotka_casu2 == minuty))
{
while(cislo_cas != 0)
{
(minuta = (cislo_cas + b));
printf("Vysledek je %i minut\n", minuta);
}
}
else if((jednotka_casu1 == hodiny) && (jednotka_casu2 == hodiny))
{
printf("Vysledek je %i hodin\n", cislo_cas); //doplnit ze to je zbytecna operace
}
else if((jednotka_casu1 == minuty) && (jednotka_casu2 == sekundy))
{
while(cislo_cas != 0)
{
(sekunda = (cislo_cas + b));
printf("Vysledek je %i sekund\n", sekunda);
}
}
else if((jednotka_casu1 == minuty) && (jednotka_casu2 == minuty))
{
printf("Vysledek je %i minut\n", cislo_cas); //doplnit ze to je zbytecna operace
}
else if((jednotka_casu1 == minuty) && (jednotka_casu2 == hodiny))
{
while(cislo_cas < 60)
{
(hodina = (cislo_cas - b));
printf("Vysledek je %i hodin\n", hodina);
}
}
else if((jednotka_casu1 == sekundy) && (jednotka_casu2 == hodiny))
{
while(cislo_cas < 3600)
{
(hodina = (cislo_cas - a));
printf("Vysledek je %i hodin\n", hodina);
}
}
else if((jednotka_casu1 == sekundy) && (jednotka_casu2 == minuty))
{
while(cislo_cas < 60)
{
(minuta = (cislo_cas - b));
printf("Vysledek je %i minut\n", minuta);
}
}
else if((jednotka_casu1 == sekundy) && (jednotka_casu2 == sekundy))
{
printf("Vysledek je %i sekund\n", cislo_cas); //zbytecna operace
}
else
printf("DOSLO K CHYBE !\n");

printf("Chcete jeste prevadet? (Ano/Ne - prvni pismeno) ");
scanf("%d\n", obnoveni);
}
while(obnoveni == 'A' || obnoveni == 'a');
system("cls");

return 0;
}


Ještě jsem ho pořádně nekontroloval, aale hned po prvním scanf se okno zavře, takže ani nevím jestli to jde jak má.. Omlouvám se za případně nepřehledné věci, nebo nedokonalosti, teprve začínám, tak klidně mi vše vytkněte co dělám špatně, ať pak už dělám správně.
Dík

Jowany
C / C++ › Můj začátečnický problém
15. 4. 2010   #127080

Zdravím,
tak jsem tu znova :D už jsem trochu pokročil, řekl jsem si, že si udělám převodník času (z jakékoliv časové jednotky do jiné), ale setkal jsem se hned na samém začátku s chybou a nechápu proč tam je.

printf("Vyberte, z jake jednotky chcete prevadet (hodiny, minuty, sekundy)\n");

printf("Prosim zadejte presne jak je na vyber v zavorce: ");
scanf("%d", &jednotka_casu1);
printf("Zadejte cislo, ktere chcete prevest: ");
scanf("%d", &cislo_cas);
printf("Zadejte na jake jednotky chcete prevadet (hodiny, minuty, sekundy)\n");
printf("Prosim zadejte presne jak je na vyber v zavorce: ");
scanf("%d", &jednotka_casu2);


Spustit se to spustí. První jednotka jde zadat, ale pak to už jen vypíše všechen text z funkcí printf a zapisovat nejde. Jednak nechápu, že to přeskočilo druhý scanf a pak text a až konečný scanf do kterého ještě nelze psát. Cursor bliká, ale nereaguje na jekékoliv klávesy.
Vše nad tím mám dobře definované a tak.

Jowany
C / C++ › Můj začátečnický problém
7. 4. 2010   #126518

Problém vyřešen :) chyběl mi tam SP, nevím jak jsem to mohl přehlédnout. Díky za pomoc, hurá do programování. TAkovou radost jsem neměl ani na vánoce.

Jowany
C / C++ › Můj začátečnický problém
7. 4. 2010   #126507

#include <stdio.h>


int main ()
{
printf ("NAZDAR");
return 0;
}


Je to to nejjednoduchší a stejně vyhazuje chybu

Jowany
C / C++ › Můj začátečnický problém
7. 4. 2010   #126502

Zdravím lidi, tak jsem se setkal se stejnou chybou, dělám ve Visual C++ 2005 a vyhazuje to stále onu chybu error C2059: syntax error : ';' .. Dělal jsem cokoliv a nešlo mi to, předtím sjem úplně stejný program spustil v pohodě a teď mi stejný zdroják vyhazuje error. Dočetl jsem se, že to je chyba Visualu, ale ani jejich řešení mi nepomohlo. Stejnou chybu mi to dělalo ve Visual C++ 2008. Poraďte pls.

Dík

Jowany
C / C++ › Můj začátečnický problém
7. 4. 2010   #126501

Zdravím lidi, tak jsem se setkal se stejnou chybou, dělám ve Visual C++ 2005 a vyhazuje to stále onu chybu error C2059: syntax error : ';' .. Dělal jsem cokoliv a nešlo mi to, předtím sjem úplně stejný program spustil v pohodě a teď mi stejný zdroják vyhazuje error. Dočetl jsem se, že to je chyba Visualu, ale ani jejich řešení mi nepomohlo. Stejnou chybu mi to dělalo ve Visual C++ 2008. Poraďte pls.

Dík

 

 

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