ahoj, potreboval bych vysvetlit cast kodu v cecku ( nejak detailne, jednoduse, abych to pochopil )
hlavne to s tema pointrama.
int UrciSmery(int i1, int i2, int *Sm) // funkce pro nalezeni vsech moznych tahu kone z pozice (i1,i2)
{
int Smer, j1, j2;
int Volne[8]; // pomocne pole, pocet volnych poli v okoli pole urceneho podle Sm
int i,j,k,x;
int PocetSm;
PocetSm = 0;
for (Smer = 0; Smer < 8; Smer++)
{
j1 = i1 + Tah[Smer].d1; // nove pozice kone
j2 = i2 + Tah[Smer].d2;
if ((j1 >= 0) && (j1 < Velikost) && (j2 >= 0) && (j2 < Velikost)) // kontrola pritomnosti na sachovnici
{
if (S[j1][j2] == -1)
{
*(Sm + PocetSm) = Smer; // do pole Sm ulozime smery tahu
Volne[PocetSm] = PocetVolnych(j1,j2); // pocet volnych poli v okoli
PocetSm++; // pocet tahu
}
}
}
for (i = 0; i < PocetSm; i++) // setridime pole Sm podle poctu volnych sousednich poli
{
k = i;
for (j = i; j < PocetSm; j++)
{
if (Volne[j] < Volne[k])
k = j;
}
if (k > i)
{
x = *(Sm + k); // prohozeni prvku pres promennou x
*(Sm + k) = *(Sm + i);
*(Sm + i) = x;
x = Volne[k]; // prohozeni prvku v poli Volne
Volne[k] = Volne[i];
Volne[i] = x;
}
}
return PocetSm; // funkce vraci pocet moznych tahu z pole
moc dekuji.
Program v cecku Vyřešeno
A pak nasleduje tohle, cemuz taky moc nerozumim
int Cesta(int i1,int i2) // funkce pro nalezeni cesty kone z pozice (i1,i2) do konce, vystupni parametr Nalezeno udava, zda se cestu podarilo nalezt
{
int Smer, Krok, j1, j2;
int Nalez;
int Nalezeno;
int *Sm;
int PocetSm;
Sm = (int *) malloc(8*sizeof(int)); // alokace pameti pro dynamicke pole
j1 = 0;
j2 = 0;
Krok = S[i1][i2] + 1; // zvedneme cislo kroku o 1
PocetSm = UrciSmery(i1,i2,Sm); // urcime pocet moznych smeru z pole (i1,i2)
Smer = 0; // zacneme od smeru 0
Nalez = 0; // zatim jsme nic nenalezli
while ((Smer < PocetSm) && (Nalez == 0)) // podminka cyklu / dokud jsme nenasli reseni nebo muzeme zkouset nejaky smer
{
j1 = i1 + Tah[*(Sm + Smer)].d1; // Smer udava aktualni pozici v dynamickem poli Sm
j2 = i2 + Tah[*(Sm + Smer)].d2;
S[j1][j2] = Krok; // na souradnice (j1,j2) ulozime aktualni krok
if (Krok == PocetKroku) // pokud jeaktualni krok roven celkovemu poctu kroku, nalezli jsme reseni, ulozime 1 do promenne Nalez
{
Nalez = 1;
}
else
{
Nalez = Cesta(j1,j2); // jinak rekurzivne volame fci Cesta s parametry (j1,j2) coz jsou nove souradanice
if (Nalez == 0)
S[j1][j2] = -1; // neuspesny pokus, je nutno se vratit
}
Smer++; // vyzkousime novy smer
}
Nalezeno = Nalez;
return Nalezeno; // navratova hodnota fce, podle ni pozname, zda jsme nasli reseni ulohy
}
int Cesta(int i1,int i2) // funkce pro nalezeni cesty kone z pozice (i1,i2) do konce, vystupni parametr Nalezeno udava, zda se cestu podarilo nalezt
{
int Smer, Krok, j1, j2;
int Nalez;
int Nalezeno;
int *Sm;
int PocetSm;
Sm = (int *) malloc(8*sizeof(int)); // alokace pameti pro dynamicke pole
j1 = 0;
j2 = 0;
Krok = S[i1][i2] + 1; // zvedneme cislo kroku o 1
PocetSm = UrciSmery(i1,i2,Sm); // urcime pocet moznych smeru z pole (i1,i2)
Smer = 0; // zacneme od smeru 0
Nalez = 0; // zatim jsme nic nenalezli
while ((Smer < PocetSm) && (Nalez == 0)) // podminka cyklu / dokud jsme nenasli reseni nebo muzeme zkouset nejaky smer
{
j1 = i1 + Tah[*(Sm + Smer)].d1; // Smer udava aktualni pozici v dynamickem poli Sm
j2 = i2 + Tah[*(Sm + Smer)].d2;
S[j1][j2] = Krok; // na souradnice (j1,j2) ulozime aktualni krok
if (Krok == PocetKroku) // pokud jeaktualni krok roven celkovemu poctu kroku, nalezli jsme reseni, ulozime 1 do promenne Nalez
{
Nalez = 1;
}
else
{
Nalez = Cesta(j1,j2); // jinak rekurzivne volame fci Cesta s parametry (j1,j2) coz jsou nove souradanice
if (Nalez == 0)
S[j1][j2] = -1; // neuspesny pokus, je nutno se vratit
}
Smer++; // vyzkousime novy smer
}
Nalezeno = Nalez;
return Nalezeno; // navratova hodnota fce, podle ni pozname, zda jsme nasli reseni ulohy
}
- Jan Pašek
- Tvůrce článků
-
Level 6.5
- Příspěvky: 3701
- Registrován: leden 06
- Bydliště: Plzeň
- Pohlaví:
- Stav:
Offline
O programovacích jazycích vím prd ale vím kde by vědět mohly (PLS omlouvám se všem co je tímhle odkazem připravím o práci)
http://www.programujte.com
http://www.programujte.com
Jendův rozcestník (Odkazy, které jsem měl dříve v podpisu najdete v mém rozcestníku.) Jendovy novinky - Co je pro Vás odemne nového Pokud potřebujete mermomocí vědět na čem páchám PC kriminalitu sestavy jsou v profilu.
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 6
- 791
-
od petr22
Zobrazit poslední příspěvek
17 pro 2023 09:11
-
- 2
- 1732
-
od atari
Zobrazit poslední příspěvek
06 čer 2023 11:33
-
-
Program se stále ptá na spuštění při startu OS
od Karrex » 17 pro 2023 15:09 » v Windows 11, 10, 8... - 2
- 1030
-
od zeus
Zobrazit poslední příspěvek
19 pro 2023 18:50
-
-
- 4
- 1389
-
od Tazator
Zobrazit poslední příspěvek
01 lis 2023 06:09
-
-
Program: klávesová zkratka->napíše se text
od pikaso.andreas » 18 črc 2023 14:12 » v Vše ostatní (sw) - 2
- 1599
-
od pikaso.andreas
Zobrazit poslední příspěvek
19 črc 2023 11:24
-
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů