home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 December / PCWorld_2002-12_cd.bin / Software / Komercni / Baltik / katB.exe / katB / BACKTRAQ / BACKTRAQ.MOD / CESTA.INC < prev    next >
Text File  |  2002-09-25  |  45KB  |  747 lines

  1. // soukromé konstanty
  2.  
  3. // konstanty pro hodnoty prom╪nné modCesta_ZpàsobZadáváníMíst
  4. # define modCesta_ZAD╡V╡N╓M╓ST_¼╓SELN╖ 1
  5. # define modCesta_ZAD╡V╡N╓M╓ST_GRAFICKY 2
  6. // konstanty pro hodnoty prom╪nné modCesta_Jak∞SouƒetSpojnicHledat
  7. # define modCesta_NEJMENµ╓_SOU¼ET 1
  8. # define modCesta_NEJV╖Tµ╓_SOU¼ET 2
  9.  
  10. // soukromé prom╪nné
  11.  
  12. int modCesta_PoƒetMíst; // poƒet míst, která lze navτtívit
  13. int *modCesta_Sou²adniceMíst; // sou²adnice míst, která lze navτtívit (kaºd∞ sud∞ [0,2,4..] prvek je X a kaºd∞ lich∞ [1,3,5..] prvek je Y)
  14. int modCesta_ZpàsobZadáváníMíst; // ƒíseln╪ nebo graficky (viz konstanty)
  15. int modCesta_PoƒetSpojnic; // poƒet spojnic, které lze p²i navτt╪vování míst pouºít
  16. int modCesta_AtributJeDélkaSpojnice; // zda se mají atributy spojnic automaticky nastavovat na grafickou vzdálenost míst, která spojnice spojuje
  17. struct modCesta_TypSpojnice {
  18.   int Místo1; // první z míst, které tvo²í spojnici
  19.   int Místo2; // druhé z míst, které tvo²í spojnici
  20.   long Atribut; // hodnota atributu spojnice
  21.   } *modCesta_Spojnice; // pole informací o spojnicích, které lze p²i navτt╪vování míst pouºít
  22. int modCesta_Jak∞SouƒetSpojnicHledat; // zda hledat nejmenτí nebo nejv╪tτí hodnotu prom╪nné SouƒetSpojnic (viz konstanty)
  23.  
  24. int *modCesta_Cesta; // pole práv╪ testované cesty - jednotlivé prvky jsou po²adová ƒísla spojnic, které cestu tvo²í
  25. long modCesta_SouƒetSpojnic; // souƒet hodnot atributà vτech spojnic, ze kter∞ch se práv╪ testovaná cesta skládá
  26. int modCesta_Θroveσ; // úroveσ zano²ení v backtrackingu (kolik spojnic je v práv╪ testované cest╪ p²ítomno)
  27. int *modCesta_Nejlepτíⁿeτení_Cesta; // kopie pole Cesta, které je dosud nejlepτí nalezen∞m ²eτením
  28. long modCesta_Nejlepτíⁿeτení_SouƒetSpojnic; // kopie prom╪nné SouƒetSpojnic, která je dosud nejlepτím nalezen∞m ²eτením
  29. int modCesta_Nejlepτíⁿeτení_Θroveσ; // kopie prom╪nné Θroveσ, která byla aktuální v dob╪ nalezení nejlepτího nalezeného ²eτení
  30.  
  31. // soukromé funkce
  32.  
  33. void modCesta_VykresliMapu(int *modCesta_VykreslovanéPole, int modCesta_VykreslovanáΘroveσ) {
  34.   int modCesta_Vykreslovan∞Prvek, modCesta_VykreslovanéMísto, modCesta_VykreslovanáSpojnice;
  35.   int modCesta_VykreslovanéPísmenoX, modCesta_VykreslovanéPísmenoY;
  36.   // uschování pàvodn╪ nastaven∞ch barev
  37.   int modCesta_PàvodníBarvy = GrBarvy();
  38.   // smazání obrazovky
  39.   GrNastavBarvuPozadí(PalBéºová);
  40.   GrSmaºOkno();
  41.   // vykreslení jednotliv∞ch míst, která lze navτtívit
  42.   GrNastavText(GrTextSPozadím);
  43.   GrNastavBarvy(PalTmav╪Modrá<<4|Palªlutá);
  44.   ¼ekejNaVR();
  45.   for(modCesta_VykreslovanéMísto=0; modCesta_VykreslovanéMísto<((!modCesta_VykreslovanéPole && modCesta_VykreslovanáΘroveσ+1)?modCesta_VykreslovanáΘroveσ:modCesta_PoƒetMíst); modCesta_VykreslovanéMísto++) {
  46.     // vykreslení písmenného oznaƒení vykreslovaného místa
  47.     GrNastavPozici(modCesta_Sou²adniceMíst[modCesta_VykreslovanéMísto*2], modCesta_Sou²adniceMíst[modCesta_VykreslovanéMísto*2+1]);
  48.     GrNastavPozici((GrPoziceX()<4)?0:(GrPoziceX()>631?627:GrPoziceX()-4), (GrPoziceY()<5)?0:(GrPoziceY()>437?432:GrPoziceY()-5));
  49.     GrPiτZnak('A'+modCesta_VykreslovanéMísto);
  50.     }
  51.   GrNastavText(GrTextBezPozadí);
  52.   // vykreslení jednotliv∞ch spojnic mezi místy, které lze p²i navτt╪vování míst pouºít
  53.   GrNastavBarvuPop²edí(Pal¼erná);
  54.   for(modCesta_VykreslovanáSpojnice=0; modCesta_VykreslovanáSpojnice<modCesta_PoƒetSpojnic; modCesta_VykreslovanáSpojnice++) {
  55.     ¼ekejNaVR();
  56.     // urƒení místa, ze kterého má vést vykreslovaná ƒára
  57.     modCesta_VykreslovanéMísto = modCesta_Spojnice[modCesta_VykreslovanáSpojnice].Místo1;
  58.     // nastavení kurzoru na pozici místa, ze kterého má vést vykreslovaná ƒára
  59.     GrNastavPozici(modCesta_Sou²adniceMíst[modCesta_VykreslovanéMísto*2], modCesta_Sou²adniceMíst[modCesta_VykreslovanéMísto*2+1]);
  60.     // urƒení místa, do kterého má vést vykreslovaná ƒára
  61.     modCesta_VykreslovanéMísto = modCesta_Spojnice[modCesta_VykreslovanáSpojnice].Místo2;
  62.     // vykreslení ƒáry spojující první z míst tvo²ící spojnici s druh∞m z nich
  63.     GrKresliLinkuDo(modCesta_Sou²adniceMíst[modCesta_VykreslovanéMísto*2], modCesta_Sou²adniceMíst[modCesta_VykreslovanéMísto*2+1]);
  64.     }
  65.   // pokud se má vykreslovat i cesta
  66.   if(modCesta_VykreslovanéPole) {
  67.     // vykreslení spojnic mezi místy tvo²ícími vykreslovanou cestu
  68.     GrNastavBarvuPop²edí(PalBílá);
  69.     GrNastavPozici(modCesta_Sou²adniceMíst[0], modCesta_Sou²adniceMíst[1]);
  70.     modCesta_VykreslovanéMísto = 0;
  71.     for(modCesta_Vykreslovan∞Prvek=0; modCesta_Vykreslovan∞Prvek<=modCesta_VykreslovanáΘroveσ; modCesta_Vykreslovan∞Prvek++) {
  72.       ¼ekejNaVR();
  73.       // urƒení spojnice, kterou má p²edstavovat vykreslovaná ƒára
  74.       modCesta_VykreslovanáSpojnice = modCesta_VykreslovanéPole[modCesta_Vykreslovan∞Prvek];
  75.       // urƒení místa, do kterého má vést vykreslovaná ƒára (urƒení sm╪ru, kter∞m je spojnice procházena)
  76.       modCesta_VykreslovanéMísto = (modCesta_Spojnice[modCesta_VykreslovanáSpojnice].Místo1 == modCesta_VykreslovanéMísto)?modCesta_Spojnice[modCesta_VykreslovanáSpojnice].Místo2:modCesta_Spojnice[modCesta_VykreslovanáSpojnice].Místo1;
  77.       // nakreslení ƒáry spojující p²edchozí místo s práv╪ vykreslovan∞m
  78.       // kreslí se poslední místo a nekreslí se nejlepτí ²eτení => nastavení odliτné barvy ƒáry k n╪mu vedoucí
  79.       if(modCesta_VykreslovanéPole != modCesta_Nejlepτíⁿeτení_Cesta && modCesta_Vykreslovan∞Prvek == modCesta_VykreslovanáΘroveσ) GrNastavBarvuPop²edí(Palªlutá);
  80.       // nakreslení samotné ƒáry
  81.       GrKresliLinkuDo(modCesta_Sou²adniceMíst[modCesta_VykreslovanéMísto*2], modCesta_Sou²adniceMíst[modCesta_VykreslovanéMísto*2+1]);
  82.       }
  83.     }
  84.  
  85.   // navrácení pàvodn╪ nastaven∞ch barev
  86.   GrNastavBarvy(modCesta_PàvodníBarvy);
  87.   }
  88.  
  89. int modCesta_ZjistiVzdálenostMíst(int modCesta_Místo1, int modCesta_Místo2) {
  90.   // zjiτt╪ní vzdálenosti mezi dv╪ma místy pomocí Pythagorovy v╪ty
  91.   return sqrt(sqr(abs(modCesta_Sou²adniceMíst[modCesta_Místo1*2]-modCesta_Sou²adniceMíst[modCesta_Místo2*2])) + sqr(abs(modCesta_Sou²adniceMíst[modCesta_Místo1*2+1]-modCesta_Sou²adniceMíst[modCesta_Místo2*2+1])));
  92.   }
  93.  
  94. string modCesta_PoleCestyNaⁿet╪zec(int *modCesta_P²evád╪néPole, int *modCesta_P²evád╪náΘroveσ, long *modCesta_P²evád╪n∞SouƒetSpojnic) {
  95.   string modCesta_Vrátit = "A";
  96.   int modCesta_P²evád╪náSpojnice, modCesta_P²evád╪néMísto = 0;
  97.   int modCesta_P²evád╪n∞Prvek;
  98.   for(modCesta_P²evád╪n∞Prvek=0; modCesta_P²evád╪n∞Prvek<=*modCesta_P²evád╪náΘroveσ; modCesta_P²evád╪n∞Prvek++) {
  99.     modCesta_P²evád╪náSpojnice = modCesta_P²evád╪néPole[modCesta_P²evád╪n∞Prvek];
  100.     modCesta_P²evád╪néMísto = (modCesta_Spojnice[modCesta_P²evád╪náSpojnice].Místo1 == modCesta_P²evád╪néMísto)?modCesta_Spojnice[modCesta_P²evád╪náSpojnice].Místo2:modCesta_Spojnice[modCesta_P²evád╪náSpojnice].Místo1;
  101.     modCesta_Vrátit += (string)(char)('A'+modCesta_P²evád╪néMísto);
  102.     }
  103.   modCesta_Vrátit += " (souƒet "+StrL¼íslo(*modCesta_P²evád╪n∞SouƒetSpojnic,-1)+")";
  104.   return modCesta_Vrátit;
  105.   }
  106.  
  107. // ve²ejné funkce
  108.  
  109. void modCesta_Start(void) {
  110.   // v p²ípad╪ grafického reºimu:
  111.   if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  112.     // smazání obrazovky
  113.     GrSmaºOkno();
  114.     // vykreslení mapy (pouze místa)
  115.     modCesta_VykresliMapu(0, -1);
  116.     }
  117.  
  118.   mod_VypiτHláτku("Po stisknutí klávesy nebo tlaƒítka myτi se rozb╪hne v∞poƒet...", mod_VYPIµHL╡µKU_NE¼EKEJ);
  119.   VyprázdniFrontuKláves(); MyτZapni();
  120.   ¼ekej(NaKlávesu|NaMyτ);
  121.   VyprázdniFrontuKláves(); MyτVypni();
  122.  
  123.   // smazání obrazovky v p²ípad╪ textového reºimu
  124.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  125.     TxtSmaºObrazovku();
  126.     }
  127.  
  128.   mod_VypiτHláτku("Probíhá v∞poƒet...", mod_VYPIµHL╡µKU_NE¼EKEJ);
  129.  
  130.   // zaznamenání ƒasu startu v∞poƒtu
  131.   Systémov∞¼as(mod_¼asStart);
  132.  
  133.   // inicializace prom╪nn∞ch pouºívan∞ch v∞poƒtem
  134.   mod_HledatDál = 1;
  135.   modCesta_SouƒetSpojnic = 0;
  136.   modCesta_Θroveσ = 0;
  137.   modCesta_Nejlepτíⁿeτení_SouƒetSpojnic = (modCesta_Jak∞SouƒetSpojnicHledat==modCesta_NEJMENµ╓_SOU¼ET?2147483647:0); // nejhorτí moºn∞ souƒet hodnot atributà spojnic - v reále nemoºn∞, bude nahrazen lepτím uº p²i nalezení první vyhovující cesty
  138.   modCesta_Nejlepτíⁿeτení_Θroveσ = 0;
  139.  
  140.   // zapsání parametrà v∞poƒtu do souboru, pokud si to uºivatel p²ál
  141.   if(mod_ZapisovatProtokol) {
  142.     mod_ProtokolZapiτStart1();
  143.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Reºim obrazovky: "+(mod_ReºimObrazovky==mod_TEXTOVφ_REªIM?"textov∞":"grafick∞")+"\n");
  144.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Poƒet míst na map╪: "+StrL¼íslo(modCesta_PoƒetMíst,-1)+"\n");
  145.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Zpàsob zadávání míst: "+(modCesta_ZpàsobZadáváníMíst==modCesta_ZAD╡V╡N╓M╓ST_¼╓SELN╖?"ƒíseln╪":"graficky")+"\n");
  146.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Sou²adnice jednotliv∞ch míst [X, Y]: ");
  147.     int modCesta_ProcházenéMísto;
  148.     for(modCesta_ProcházenéMísto=0; modCesta_ProcházenéMísto<modCesta_PoƒetMíst; modCesta_ProcházenéMísto++) SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, StrL¼íslo(modCesta_Sou²adniceMíst[modCesta_ProcházenéMísto*2],-1)+","+StrL¼íslo(modCesta_Sou²adniceMíst[modCesta_ProcházenéMísto*2+1],-1)+" ");
  149.     SouborPiτNov∞ⁿádek(mod_ZapisovatProtokol_Soubor);
  150.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Poƒet spojnic mezi místy: "+StrL¼íslo(modCesta_PoƒetSpojnic,-1)+"\n");
  151.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Jednotlivé spojnice a jejich atributy [Místo1, Místo2, Atribut]: ");
  152.     int modCesta_ProcházenáSpojnice;
  153.     for(modCesta_ProcházenáSpojnice=0; modCesta_ProcházenáSpojnice<modCesta_PoƒetSpojnic; modCesta_ProcházenáSpojnice++) SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, (string)(char)('A'+modCesta_Spojnice[modCesta_ProcházenáSpojnice].Místo1)+","+(string)(char)('A'+modCesta_Spojnice[modCesta_ProcházenáSpojnice].Místo2)+","+StrL¼íslo(modCesta_Spojnice[modCesta_ProcházenáSpojnice].Atribut,-1)+" ");
  154.     SouborPiτNov∞ⁿádek(mod_ZapisovatProtokol_Soubor);
  155.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Jak∞ souƒet hodnot atributà hledat: "+(modCesta_Jak∞SouƒetSpojnicHledat==modCesta_NEJMENµ╓_SOU¼ET?"nejmenτí":"nejv╪tτí")+"\n");
  156.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Zobrazované pozice: "+(mod_ZobrazovanéPozice==mod_POUZE_ⁿEµEN╓?"jen nalezená ²eτení":"i pràb╪h hledání")+"\n");
  157.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Vyƒkat po nalezení nového nejlepτího ²eτení na stisk klávesy: "+(mod_¼ekatNaKlávesu?"ano":"ne")+"\n");
  158.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Zapisovat protokol o v∞poƒtu: "+(mod_ZapisovatProtokol?"ano":"ne")+"\n");
  159.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Soubor protokolu: "+mod_ZapisovatProtokol_Název+"\n");
  160.     mod_ProtokolZapiτStart2();
  161.     }
  162.   }
  163.  
  164. void modCesta_Hotovo(void) {
  165.   // uloºení ƒasu dokonƒení v∞poƒtu
  166.   Systémov∞¼as(mod_¼asHotovo);
  167.   // p²ekreslení mapy - vykreslení prázdné mapy
  168.   if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  169.     modCesta_VykresliMapu(0, -1);
  170.     }
  171.   // v p²ípad╪ grafického reºimu pípnutí - oznámení dokonƒení v∞poƒtu
  172.   if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) { Tón(1000); ¼ekej(1500); VypniTón(); }
  173.   // pokud bylo vàbec nalezeno n╪jaké nejlepτí ²eτení
  174.   if((modCesta_Jak∞SouƒetSpojnicHledat == modCesta_NEJMENµ╓_SOU¼ET && modCesta_Nejlepτíⁿeτení_SouƒetSpojnic < 2147483647) || (modCesta_Jak∞SouƒetSpojnicHledat == modCesta_NEJV╖Tµ╓_SOU¼ET && modCesta_Nejlepτíⁿeτení_SouƒetSpojnic > 0)) {
  175.     // p²ekreslení mapy - vykreslení nejlepτího nalezeného ²eτení
  176.     if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  177.       modCesta_VykresliMapu(modCesta_Nejlepτíⁿeτení_Cesta, modCesta_Nejlepτíⁿeτení_Θroveσ);
  178.       }
  179.     }
  180.   // v∞poƒet doby trvání v∞poƒtu
  181.   mod_V∞poƒetDobyTrváníV∞poƒtu();
  182.   // zobrazení doby trvání v∞poƒtu
  183.   mod_VypiτHláτku("Hotovo. Délka: "+StrL¼ísloZeroPad(mod_¼asRozdíl.Hodiny,2)+":"+StrL¼ísloZeroPad(mod_¼asRozdíl.Minuty,2)+":"+StrL¼ísloZeroPad(mod_¼asRozdíl.Sekundy,2)+"."+StrL¼ísloZeroPad(mod_¼asRozdíl.Setiny,2)+"...", mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESUGRAFIKA);
  184.   // zapsání informací t∞kajících se dokonƒení v∞poƒtu do souboru, pokud si to uºivatel p²ál
  185.   if(mod_ZapisovatProtokol) {
  186.     // pokud bylo vàbec nalezeno n╪jaké nejlepτí ²eτení
  187.     if((modCesta_Jak∞SouƒetSpojnicHledat == modCesta_NEJMENµ╓_SOU¼ET && modCesta_Nejlepτíⁿeτení_SouƒetSpojnic < 2147483647) || (modCesta_Jak∞SouƒetSpojnicHledat == modCesta_NEJV╖Tµ╓_SOU¼ET && modCesta_Nejlepτíⁿeτení_SouƒetSpojnic > 0)) {
  188.       SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "NEJLEPµ╓ ⁿEµEN╓: ");
  189.       SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, modCesta_PoleCestyNaⁿet╪zec(modCesta_Nejlepτíⁿeτení_Cesta, &modCesta_Nejlepτíⁿeτení_Θroveσ, &modCesta_Nejlepτíⁿeτení_SouƒetSpojnic));
  190.       SouborPiτNov∞ⁿádek(mod_ZapisovatProtokol_Soubor);
  191.       }
  192.     // jinak pokud nebylo nalezeno ºádné nejlepτí ²eτení
  193.     else {
  194.       SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Nebylo nalezeno ºádné ²eτení.\n");
  195.       }
  196.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Hotovo: "+StrL¼ísloZeroPad(mod_¼asHotovo.Hodiny,2)+":"+StrL¼ísloZeroPad(mod_¼asHotovo.Minuty,2)+":"+StrL¼ísloZeroPad(mod_¼asHotovo.Sekundy,2)+"."+StrL¼ísloZeroPad(mod_¼asHotovo.Setiny,2)+"\n");
  197.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Délka v∞poƒtu: "+StrL¼ísloZeroPad(mod_¼asRozdíl.Hodiny,2)+":"+StrL¼ísloZeroPad(mod_¼asRozdíl.Minuty,2)+":"+StrL¼ísloZeroPad(mod_¼asRozdíl.Sekundy,2)+"."+StrL¼ísloZeroPad(mod_¼asRozdíl.Setiny,2)+"\n");
  198.     mod_ProtokolZapiτHotovo();
  199.     }
  200.   // pokud bylo vàbec nalezeno n╪jaké nejlepτí ²eτení
  201.   if((modCesta_Jak∞SouƒetSpojnicHledat == modCesta_NEJMENµ╓_SOU¼ET && modCesta_Nejlepτíⁿeτení_SouƒetSpojnic < 2147483647) || (modCesta_Jak∞SouƒetSpojnicHledat == modCesta_NEJV╖Tµ╓_SOU¼ET && modCesta_Nejlepτíⁿeτení_SouƒetSpojnic > 0)) {
  202.     mod_VypiτHláτku("NEJLEPµ╓ ⁿEµEN╓: " + modCesta_PoleCestyNaⁿet╪zec(modCesta_Nejlepτíⁿeτení_Cesta, &modCesta_Nejlepτíⁿeτení_Θroveσ, &modCesta_Nejlepτíⁿeτení_SouƒetSpojnic), mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESU);
  203.     }
  204.   // jinak pokud nebylo nalezeno ºádné nejlepτí ²eτení
  205.   else {
  206.     mod_VypiτHláτku("Nebylo nalezeno ºádné ²eτení.", mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESU);
  207.     }
  208.   }
  209.  
  210. void modCesta_Θklid(void) {
  211.   // uvoln╪ní pam╪ti pouºité pro pole sou²adnic míst
  212.   HromadaUvolniPam╪£(modCesta_Sou²adniceMíst);
  213.   modCesta_Sou²adniceMíst = 0;
  214.   // uvoln╪ní pam╪ti pouºité pro pole spojnic
  215.   HromadaUvolniPam╪£(modCesta_Spojnice);
  216.   modCesta_Spojnice = 0;
  217.   // uvoln╪ní pam╪ti pouºité pro pole cesty
  218.   HromadaUvolniPam╪£(modCesta_Cesta);
  219.   modCesta_Cesta = 0;
  220.   // uvoln╪ní pam╪ti pouºité pro pole nejlepτího ²eτení
  221.   HromadaUvolniPam╪£(modCesta_Nejlepτíⁿeτení_Cesta);
  222.   modCesta_Nejlepτíⁿeτení_Cesta = 0;
  223.   }
  224.  
  225. void modCesta_ZadáníVstupu(void) {
  226.   // INICIALIZACE REªIMU OBRAZOVKY
  227.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  228.     // p²epnutí do textového reºimu
  229.     P²epniNaText();
  230.     }
  231.   else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  232.     GrSmaºOkno();
  233.     }
  234.  
  235.   // INFORMACE O REªIMU OBRAZOVKY
  236.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  237.     mod_VypiτHláτku("Pouºívám textov∞ reºim...", mod_VYPIµHL╡µKU_VY¼KEJ);
  238.     }
  239.   else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  240.     mod_VypiτHláτku("Pouºívám grafick∞ reºim...", mod_VYPIµHL╡µKU_VY¼KEJ);
  241.     }
  242.  
  243.   // INICIALIZACE PROM╖NNφCH, KTERÉ JE POTⁿEBA M╓T INICIALIZOVANÉ JIª PⁿED JEJICH ZAD╡N╓M
  244.   modCesta_PoƒetMíst = 0;
  245.   modCesta_PoƒetSpojnic = 0;
  246.  
  247.   // ZJIµT╖N╓ PO¼TU M╓ST NA MAP╖, KTER╡ JE MOªNO PROJ╓T
  248.   mod_VypiτHláτku("Zadejte, kolik míst na map╪ chcete vloºit [2-26]: ", mod_VYPIµHL╡µKU_NE¼EKEJ);
  249.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  250.     while((VyprázdniFrontuKláves(),Txt¼tiI¼íslo(modCesta_PoƒetMíst)) || modCesta_PoƒetMíst < 2 || modCesta_PoƒetMíst > 26);
  251.     }
  252.   else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  253.     GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  254.     while((VyprázdniFrontuKláves(),Gr¼tiI¼íslo("",modCesta_PoƒetMíst,2,0,PalTmav╪Modrá<<4|Palªlutá)) || modCesta_PoƒetMíst < 2 || modCesta_PoƒetMíst > 26);
  255.     GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  256.     }
  257.  
  258.   // INFORMACE O PO¼TU M╓ST NA MAP╖, KTER╡ JE MOªNO PROJ╓T
  259.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  260.     mod_VypiτHláτku("Budete vkládat "+StrL¼íslo(modCesta_PoƒetMíst,-1)+" míst...", mod_VYPIµHL╡µKU_VY¼KEJ);
  261.     }
  262.  
  263.   // Pⁿ╓PRAVA POLE SOUⁿADNIC M╓ST
  264.   // alokace pam╪ti pro pole
  265.   modCesta_Sou²adniceMíst = (int*)HromadaAlokujPam╪£(modCesta_PoƒetMíst*2*sizeof(modCesta_Sou²adniceMíst[0]));
  266.   // vynulování vτech prvkà pole
  267.   memset(modCesta_Sou²adniceMíst, 0, modCesta_PoƒetMíst*2*sizeof(modCesta_Sou²adniceMíst[0]));
  268.  
  269.   // Pⁿ╓PRAVA POLE CESTY
  270.   // alokace pam╪ti pro pole
  271.   modCesta_Cesta = (int*)HromadaAlokujPam╪£((modCesta_PoƒetMíst-1)*sizeof(modCesta_Cesta[0]));
  272.   // vynulování vτech prvkà pole
  273.   memset(modCesta_Cesta, 0, (modCesta_PoƒetMíst-1)*sizeof(modCesta_Cesta[0]));
  274.  
  275.   // Pⁿ╓PRAVA POLE NEJLEPµ╓HO ⁿEµEN╓
  276.   // alokace pam╪ti pro pole
  277.   modCesta_Nejlepτíⁿeτení_Cesta = (int*)HromadaAlokujPam╪£((modCesta_PoƒetMíst-1)*sizeof(modCesta_Nejlepτíⁿeτení_Cesta[0]));
  278.   // vynulování vτech prvkà pole
  279.   memset(modCesta_Nejlepτíⁿeτení_Cesta, 0, (modCesta_PoƒetMíst-1)*sizeof(modCesta_Nejlepτíⁿeτení_Cesta[0]));
  280.  
  281.   // ZJIµT╖N╓ ZP▐SOBU ZAD╡V╡N╓ SOUⁿADNIC JEDNOTLIVφCH M╓ST NA MAP╖, KTER╡ JE MOªNO PROJ╓T
  282.   if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  283.     // pokud je vybrán grafick∞ reºim, umoºníme zpàsob zadávání vybrat
  284.     mod_NechZvolit_Volby[0] = "ƒíseln╪"; mod_NechZvolit_AccessKeys[0] = 'ƒ';
  285.     mod_NechZvolit_Volby[1] = "graficky"; mod_NechZvolit_AccessKeys[1] = 'g';
  286.     switch(mod_NechZvolit("Zvolte zpàsob zadávání sou²adnic míst na map╪:")) {
  287.       case 0: modCesta_ZpàsobZadáváníMíst = modCesta_ZAD╡V╡N╓M╓ST_¼╓SELN╖; break;
  288.       case 1: modCesta_ZpàsobZadáváníMíst = modCesta_ZAD╡V╡N╓M╓ST_GRAFICKY; break;
  289.       }
  290.     }
  291.   else if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  292.     // jinak pokud je vybrán textov∞ reºim, lze zadávat pouze ƒíseln╪
  293.     modCesta_ZpàsobZadáváníMíst = modCesta_ZAD╡V╡N╓M╓ST_¼╓SELN╖;
  294.     }
  295.  
  296.   // ZJIµT╖N╓ SOUⁿADNIC JEDNOTLIVφCH M╓ST NA MAP╖, KTER╡ JE MOªNO PROJ╓T
  297.   int modCesta_ZadávanéMísto;
  298.   if(modCesta_ZpàsobZadáváníMíst == modCesta_ZAD╡V╡N╓M╓ST_¼╓SELN╖) {
  299.     for(modCesta_ZadávanéMísto=0; modCesta_ZadávanéMísto<modCesta_PoƒetMíst; modCesta_ZadávanéMísto++) {
  300.       // ZJIµT╖N╓ X SOUⁿADNICE PR╡V╖ ZAD╡VANÉHO M╓STA
  301.       mod_VypiτHláτku("Zadejte X sou²adnici místa "+(string)(char)('A'+modCesta_ZadávanéMísto)+" v pixelech [0-635]: ", mod_VYPIµHL╡µKU_NE¼EKEJ);
  302.       if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  303.         while((VyprázdniFrontuKláves(),Txt¼tiI¼íslo(modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2])) || modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2] < 0 || modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2] > 635);
  304.         }
  305.       else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  306.         GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  307.         while((VyprázdniFrontuKláves(),Gr¼tiI¼íslo("",modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2],3,0,PalTmav╪Modrá<<4|Palªlutá)) || modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2] < 0 || modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2] > 635);
  308.         GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  309.         }
  310.  
  311.       // ZJIµT╖N╓ Y SOUⁿADNICE PR╡V╖ ZAD╡VANÉHO M╓STA
  312.       mod_VypiτHláτku("Zadejte Y sou²adnici místa "+(string)(char)('A'+modCesta_ZadávanéMísto)+" v pixelech [0-442]: ", mod_VYPIµHL╡µKU_NE¼EKEJ);
  313.       if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  314.         while((VyprázdniFrontuKláves(),Txt¼tiI¼íslo(modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2+1])) || modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2+1] < 0 || modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2+1] > 442);
  315.         }
  316.       else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  317.         GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  318.         while((VyprázdniFrontuKláves(),Gr¼tiI¼íslo("",modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2+1],3,0,PalTmav╪Modrá<<4|Palªlutá)) || modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2+1] < 0 || modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2+1] > 442);
  319.         GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  320.         }
  321.  
  322.       // ZOBRAZEN╓ PR╡V╖ ZAD╡VANÉHO M╓STA SPOLU S OSTATN╓MI JIª ZADANφMI
  323.       if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  324.         modCesta_VykresliMapu(0, modCesta_ZadávanéMísto+1);
  325.         }
  326.  
  327.       // INFORMACE O SOUⁿADNICI PR╡V╖ ZAD╡VANÉHO M╓STA
  328.       if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  329.         mod_VypiτHláτku("Sou²adnice místa "+(string)(char)('A'+modCesta_ZadávanéMísto)+" je "+StrL¼íslo(modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2],-1)+","+StrL¼íslo(modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2+1],-1)+"...", mod_VYPIµHL╡µKU_VY¼KEJ);
  330.         }
  331.       }
  332.     }
  333.   else if(modCesta_ZpàsobZadáváníMíst == modCesta_ZAD╡V╡N╓M╓ST_GRAFICKY) {
  334.     NastavJménoBankyP²edm╪tà("*\\backtraq");
  335.     MyτZapni();
  336.     MyτNastavGrKurzor(25);
  337.     MyτNastavPozici(mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1+(mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X2-mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1)/2, mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1+(mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y2-mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1)/2);
  338.     for(modCesta_ZadávanéMísto=0; modCesta_ZadávanéMísto<modCesta_PoƒetMíst; modCesta_ZadávanéMísto++) {
  339.       // ZJIµT╖N╓ X SOUⁿADNICE PR╡V╖ ZAD╡VANÉHO M╓STA
  340.       mod_VypiτHláτku("Pomocí myτi zadejte sou²adnici místa "+(string)(char)('A'+modCesta_ZadávanéMísto)+".", mod_VYPIµHL╡µKU_NE¼EKEJ);
  341.       // vykreslení mapy - pouze dosud zadaná místa
  342.       modCesta_VykresliMapu(0, modCesta_ZadávanéMísto);
  343.       // nastavení a zobrazení myτi
  344.       MyτVyprázdniFrontuUdálostí();
  345.       MyτZobrazKurzor();
  346.       // vyƒkání na volbu pozice práv╪ zadávaného místa
  347.       do{
  348.         Myτ¼tiUdálost(gMyτUdálost);
  349.         }while(gMyτUdálost.Typ != MyτUdálostLevéTlNahoru);
  350.       gMyτUdálost.X -= mod_GRAFIKA_VφSTUP_MOJEPLOCHA_X1;
  351.       gMyτUdálost.Y -= mod_GRAFIKA_VφSTUP_MOJEPLOCHA_Y1;
  352.       // schování kurzoru myτi
  353.       MyτSchovejKurzor();
  354.       // uloºení zadan∞ch hodnot do pole
  355.       modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2] = gMyτUdálost.X;
  356.       modCesta_Sou²adniceMíst[modCesta_ZadávanéMísto*2+1] = gMyτUdálost.Y;
  357.       }
  358.     MyτVypni();
  359.     // vykreslení mapy - vτechna zadaná místa
  360.     modCesta_VykresliMapu(0, -1);
  361.     NastavJménoBankyP²edm╪tà("*\\backtraq.mod\\"+AktivníModul->KrátkéJméno);
  362.     }
  363.  
  364.   // ZJIµT╖N╓ PO¼TU SPOJNIC, KTERÉ JE MOªNO PⁿI NAVµT╖VOV╡N╓ M╓ST POUª╓T
  365.   mod_VypiτHláτku("Zadejte, kolik spojnic mezi místy chcete vloºit [1-"+StrL¼íslo(modCesta_PoƒetMíst*(modCesta_PoƒetMíst-1)/2,-1)+"]: ", mod_VYPIµHL╡µKU_NE¼EKEJ);
  366.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  367.     while((VyprázdniFrontuKláves(),Txt¼tiI¼íslo(modCesta_PoƒetSpojnic)) || modCesta_PoƒetSpojnic < 1 || modCesta_PoƒetSpojnic > modCesta_PoƒetMíst*(modCesta_PoƒetMíst-1)/2);
  368.     }
  369.   else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  370.     GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  371.     while((VyprázdniFrontuKláves(),Gr¼tiI¼íslo("",modCesta_PoƒetSpojnic,3,0,PalTmav╪Modrá<<4|Palªlutá)) || modCesta_PoƒetSpojnic < 1 || modCesta_PoƒetSpojnic > modCesta_PoƒetMíst*(modCesta_PoƒetMíst-1)/2);
  372.     GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  373.     }
  374.  
  375.   // INFORMACE O PO¼TU SPOJNIC, KTERÉ JE MOªNO PⁿI NAVµT╖VOV╡N╓ M╓ST POUª╓T
  376.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  377.     mod_VypiτHláτku("Budete vkládat "+StrL¼íslo(modCesta_PoƒetSpojnic,-1)+" spojnic...", mod_VYPIµHL╡µKU_VY¼KEJ);
  378.     }
  379.  
  380.   // Pⁿ╓PRAVA POLE SPOJNIC
  381.   // alokace pam╪ti pro pole
  382.   modCesta_Spojnice = (struct modCesta_TypSpojnice*)HromadaAlokujPam╪£(modCesta_PoƒetSpojnic*sizeof(modCesta_Spojnice[0]));
  383.   // vynulování vτech prvkà pole
  384.   memset(modCesta_Spojnice, 0, modCesta_PoƒetSpojnic*sizeof(modCesta_Spojnice[0]));
  385.  
  386.   // ZJIµT╖N╓, ZDA M╡ BφT HODNOTA ATRIBUTU SPOJNICE AUTOMATICKY NASTAVOV╡NA NA GRAFICKOU VZD╡LENOST M╓ST, KTER╡ SPOJUJE
  387.   mod_NechZvolit_Volby[0] = "ano"; mod_NechZvolit_AccessKeys[0] = 'a';
  388.   mod_NechZvolit_Volby[1] = "ne"; mod_NechZvolit_AccessKeys[1] = 'n';
  389.   switch(mod_NechZvolit("Nastavovat atributy spojnic automaticky na jejich grafickou délku v pixelech?")) {
  390.     case 0: modCesta_AtributJeDélkaSpojnice = 1; break;
  391.     case 1: modCesta_AtributJeDélkaSpojnice = 0; break;
  392.     }
  393.  
  394.   // INFORMACE O TOM, ZDA M╡ BφT HODNOTA ATRIBUTU SPOJNICE AUTOMATICKY NASTAVOV╡NA NA GRAFICKOU VZD╡LENOST M╓ST, KTER╡ SPOJUJE
  395.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  396.     mod_VypiτHláτku("Atributy spojnic "+(modCesta_AtributJeDélkaSpojnice?"budu":"nebudu")+" automaticky nastavovat na jejich grafickou délkou...", mod_VYPIµHL╡µKU_VY¼KEJ);
  397.     }
  398.  
  399.   // ZJIµT╖N╓ INFORMAC╓ O SPOJNIC╓CH, KTERÉ JE MOªNO PⁿI NAVµT╖VOV╡N╓ M╓ST POUª╓T
  400.   modCesta_VykresliMapu(0, -1);
  401.   int modCesta_ZadávanáSpojnice;
  402.   int modCesta_ProcházenáSpojnice;
  403.   char modCesta_Naƒten∞Znak;
  404.   for(modCesta_ZadávanáSpojnice=0; modCesta_ZadávanáSpojnice<modCesta_PoƒetSpojnic; modCesta_ZadávanáSpojnice++) {
  405.     // ZJIµT╖N╓ PRVN╓HO Z M╓ST TVOⁿ╓C╓CH PR╡V╖ ZAD╡VANOU SPOJNICI
  406.     mod_VypiτHláτku("Zadejte písmenné oznaƒení prvního z míst tvo²ícího "+StrL¼íslo(modCesta_ZadávanáSpojnice+1,-1)+". spojnici [A-"+(string)(char)('A'+modCesta_PoƒetMíst-1)+"]: ", mod_VYPIµHL╡µKU_NE¼EKEJ);
  407.     if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  408.       while((VyprázdniFrontuKláves(),(modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1=(int)((*(char*)StrNaVelká((string)(char)Txt¼tiZnak()))-'A'))==-1) || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1 < 0 || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1 > modCesta_PoƒetMíst-1);
  409.       }
  410.     else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  411.       GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  412.       while((VyprázdniFrontuKláves(),Gr¼tiZnak("",modCesta_Naƒten∞Znak,0,PalTmav╪Modrá<<4|Palªlutá)==-1||0*(modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1=(int)((*(char*)StrNaVelká((string)modCesta_Naƒten∞Znak))-'A'))) || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1 < 0 || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1 > modCesta_PoƒetMíst-1);
  413.       GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  414.       }
  415.  
  416.     // ZJIµT╖N╓ DRUHÉHO Z M╓ST TVOⁿ╓C╓CH PR╡V╖ ZAD╡VANOU SPOJNICI
  417.     mod_VypiτHláτku("Zadejte písmenné oznaƒení druhého z míst tvo²ícího "+StrL¼íslo(modCesta_ZadávanáSpojnice+1,-1)+". spojnici [A-"+(string)(char)('A'+modCesta_PoƒetMíst-1)+"]: ", mod_VYPIµHL╡µKU_NE¼EKEJ);
  418.     if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  419.       while((VyprázdniFrontuKláves(),(modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2=(int)((*(char*)StrNaVelká((string)(char)Txt¼tiZnak()))-'A'))==-1) || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2 < 0 || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2 > modCesta_PoƒetMíst-1);
  420.       }
  421.     else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  422.       GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  423.       while((VyprázdniFrontuKláves(),Gr¼tiZnak("",modCesta_Naƒten∞Znak,0,PalTmav╪Modrá<<4|Palªlutá)==-1||0*(modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2=(int)((*(char*)StrNaVelká((string)modCesta_Naƒten∞Znak))-'A'))) || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2 < 0 || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2 > modCesta_PoƒetMíst-1);
  424.       GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  425.       }
  426.  
  427.     // KONTROLA PLATNOSTI PR╡V╖ ZAD╡VANÉ SPOJNICE
  428.     // kontrola zadání neexistující spojnice (vedoucí z jednoho místa do stejného)
  429.     if(modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1 == modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2) {
  430.       mod_VypiτHláτku("Chyba: Spojnice nemàºe zaƒínat i konƒit ve stejném míst╪. Zadejte jinou.", mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESUGRAFIKA);
  431.       modCesta_ZadávanáSpojnice--;
  432.       continue;
  433.       }
  434.  
  435.     // kontrola druhého zadávání jiº jednou zadané spojnice
  436.     for(modCesta_ProcházenáSpojnice=0; modCesta_ProcházenáSpojnice<modCesta_ZadávanáSpojnice; modCesta_ProcházenáSpojnice++) {
  437.       if((modCesta_Spojnice[modCesta_ProcházenáSpojnice].Místo1 == modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1 &&
  438.           modCesta_Spojnice[modCesta_ProcházenáSpojnice].Místo2 == modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2) ||
  439.          (modCesta_Spojnice[modCesta_ProcházenáSpojnice].Místo2 == modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1 &&
  440.           modCesta_Spojnice[modCesta_ProcházenáSpojnice].Místo1 == modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2)) {
  441.         // zadávaná spojnice jiº byla zadána
  442.         mod_VypiτHláτku("Chyba: Stejná spojnice jiº byla d²íve zadána. Zadejte jinou.", mod_VYPIµHL╡µKU_¼EKEJNAKL╡VESUGRAFIKA);
  443.         break;
  444.         }
  445.       }
  446.     if(modCesta_ProcházenáSpojnice < modCesta_ZadávanáSpojnice) {
  447.       modCesta_ZadávanáSpojnice--;
  448.       continue;
  449.       }
  450.  
  451.     // ZJIµT╖N╓ HODNOTY ATRIBUTU PR╡V╖ ZAD╡VANÉ SPOJNICE
  452.     if(modCesta_AtributJeDélkaSpojnice) {
  453.       // automatické nastavení atributu spojnice na grafickou vzdálenost míst, která spojuje
  454.       modCesta_Spojnice[modCesta_ZadávanáSpojnice].Atribut = modCesta_ZjistiVzdálenostMíst(modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1, modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2);
  455.       }
  456.     else {
  457.       // ruƒní zadání hodnoty atributu spojnice
  458.       mod_VypiτHláτku("Zadejte hodnotu atributu "+StrL¼íslo(modCesta_ZadávanáSpojnice+1,-1)+". spojnice [1-1000000]: ", mod_VYPIµHL╡µKU_NE¼EKEJ);
  459.       if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  460.         while((VyprázdniFrontuKláves(),Txt¼tiL¼íslo(modCesta_Spojnice[modCesta_ZadávanáSpojnice].Atribut)) || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Atribut < 1 || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Atribut > 1000000);
  461.         }
  462.       else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  463.         GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  464.         while((VyprázdniFrontuKláves(),Gr¼tiL¼íslo("",modCesta_Spojnice[modCesta_ZadávanáSpojnice].Atribut,7,0,PalTmav╪Modrá<<4|Palªlutá)) || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Atribut < 1 || modCesta_Spojnice[modCesta_ZadávanáSpojnice].Atribut > 1000000);
  465.         GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  466.         }
  467.       }
  468.  
  469.     // ZOBRAZEN╓ PR╡V╖ ZAD╡VANÉ SPOJNICE SPOLU S JIª ZADANφMI
  470.     if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  471.       modCesta_VykresliMapu(0, -1);
  472.       }
  473.  
  474.     // INFORMACE O PR╡V╖ ZAD╡VANÉ SPOJNICI
  475.     if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  476.       mod_VypiτHláτku(StrL¼íslo(modCesta_ZadávanáSpojnice+1,-1)+". spojnice spojuje místa "+(string)(char)('A'+modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo1)+" a "+(string)(char)('A'+modCesta_Spojnice[modCesta_ZadávanáSpojnice].Místo2)+" a má atribut hodnoty "+StrL¼íslo(modCesta_Spojnice[modCesta_ZadávanáSpojnice].Atribut,-1)+"...", mod_VYPIµHL╡µKU_VY¼KEJ);
  477.       }
  478.     }
  479.  
  480.   // ZJIµT╖N╓, JAKφ SOU¼ET HODNOT ATRIBUT▐ VµECH SPOJNIC HLEDAT
  481.   mod_NechZvolit_Volby[0] = "co nejmenτí"; mod_NechZvolit_AccessKeys[0] = 'm';
  482.   mod_NechZvolit_Volby[1] = "co nejv╪tτí"; mod_NechZvolit_AccessKeys[1] = 'v';
  483.   switch(mod_NechZvolit("Jak∞ souƒet hodnot atributà vτech spojnic na cest╪ se má hledat?")) {
  484.     case 0: modCesta_Jak∞SouƒetSpojnicHledat = modCesta_NEJMENµ╓_SOU¼ET; break;
  485.     case 1: modCesta_Jak∞SouƒetSpojnicHledat = modCesta_NEJV╖Tµ╓_SOU¼ET; break;
  486.     }
  487.  
  488.   // INFORMACE O TOM, JAKφ SOU¼ET HODNOT ATRIBUT▐ VµECH SPOJNIC HLEDAT
  489.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  490.     mod_VypiτHláτku("Budu hledat co "+(modCesta_Jak∞SouƒetSpojnicHledat==modCesta_NEJMENµ╓_SOU¼ET?"nejmenτí":"nejv╪tτí")+" souƒet hodnot atributà vτech spojnic na cest╪...", mod_VYPIµHL╡µKU_VY¼KEJ);
  491.     }
  492.  
  493.   // ZJIµT╖N╓, KTERÉ POZICE ZOBRAZOVAT
  494.   mod_NechZvolit_Volby[0] = "jen ²eτení"; mod_NechZvolit_AccessKeys[0] = '²';
  495.   mod_NechZvolit_Volby[1] = "i pràb╪h hledání"; mod_NechZvolit_AccessKeys[1] = 'p';
  496.   switch(mod_NechZvolit("Zobrazovat jen nalezená ²eτení nebo i pràb╪h hledání (upozorn╪ní: pomalé)?")) {
  497.     case 0: mod_ZobrazovanéPozice = mod_POUZE_ⁿEµEN╓; break;
  498.     case 1: mod_ZobrazovanéPozice = mod_VµECHNY_POZICE; break;
  499.     }
  500.  
  501.   // INFORMACE O TOM, KTERÉ POZICE ZOBRAZOVAT
  502.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  503.     mod_VypiτHláτku("Budu zobrazovat "+(mod_ZobrazovanéPozice==mod_POUZE_ⁿEµEN╓?"jen nalezená ²eτení":"i pràb╪h hledání")+"...", mod_VYPIµHL╡µKU_VY¼KEJ);
  504.     }
  505.  
  506.   // ZJIµT╖N╓, ZDA ¼EKAT PO NALEZEN╓ NOVÉHO NEJLEPµ╓HO ⁿEµEN╓ NA STISK KL╡VESY
  507.   if(mod_ZobrazovanéPozice == mod_POUZE_ⁿEµEN╓) {
  508.     // pokud se zobrazuje pouze v∞sledné nalezené ²eτení, po nalezení jednotliv∞ch nov∞ch nejlepτích ²eτení se nikdy neƒeká
  509.     mod_¼ekatNaKlávesu = 0;
  510.     }
  511.   else {
  512.     mod_NechZvolit_Volby[0] = "ano, vyƒkat"; mod_NechZvolit_AccessKeys[0] = 'a';
  513.     mod_NechZvolit_Volby[1] = "ne, neƒekat"; mod_NechZvolit_AccessKeys[1] = 'n';
  514.     switch(mod_NechZvolit("Vyƒkat po nalezení nového nejlepτího ²eτení na stisknutí klávesy?")) {
  515.       case 0: mod_¼ekatNaKlávesu = 1; break;
  516.       case 1: mod_¼ekatNaKlávesu = 0; break;
  517.       }
  518.  
  519.     // INFORMACE O TOM, ZDA PO NALEZEN╓ NOVÉHO NEJLEPµ╓HO ⁿEµEN╓ ¼EKAT NA STISK KL╡VESY
  520.     if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  521.       mod_VypiτHláτku("Po nalezení nového nejlepτího ²eτení "+(mod_¼ekatNaKlávesu?"budu":"nebudu")+" ƒekat na stisk klávesy...", mod_VYPIµHL╡µKU_VY¼KEJ);
  522.       }
  523.     }
  524.  
  525.   // ZJIµT╖N╓, ZDA ZAPISOVAT PROTOKOL O VφPO¼TU DO SOUBORU
  526.   mod_NechZvolit_Volby[0] = "ano, zapisovat"; mod_NechZvolit_AccessKeys[0] = 'a';
  527.   mod_NechZvolit_Volby[1] = "ne, nezapisovat"; mod_NechZvolit_AccessKeys[1] = 'n';
  528.   switch(mod_NechZvolit("Zapisovat protokol o v∞poƒtu do souboru?")) {
  529.     case 0: mod_ZapisovatProtokol = 1; break;
  530.     case 1: mod_ZapisovatProtokol = 0; break;
  531.     }
  532.  
  533.   // INFORMACE O TOM, ZDA ZAPISOVAT PROTOKOL O VφPO¼TU DO SOUBORU
  534.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  535.     mod_VypiτHláτku("Protokol o v∞poƒtu "+(mod_ZapisovatProtokol?"budu":"nebudu")+" zapisovat do souboru...", mod_VYPIµHL╡µKU_VY¼KEJ);
  536.     }
  537.  
  538.   if(mod_ZapisovatProtokol) {
  539.     // ZJIµT╖N╓ N╡ZVU SOUBORU, KAM ZAPISOVAT PROTOKOL O VφPO¼TU
  540.     mod_VypiτHláτku("Zadejte název souboru: ", mod_VYPIµHL╡µKU_NE¼EKEJ);
  541.     mod_ZapisovatProtokol_Název = "";
  542.     if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  543.       Txtⁿádkov∞Editor(mod_ZapisovatProtokol_Název,50,50,-1,0);
  544.       TxtPiτNov∞ⁿádek();
  545.       }
  546.     else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  547.       GrNastavV∞stup(mod_GRAFIKA_VφSTUP_POKYN);
  548.       VyprázdniFrontuKláves();
  549.       Grⁿádkov∞Editor(mod_ZapisovatProtokol_Název,50,-1,0,-1,PalTmav╪Modrá<<4|Palªlutá);
  550.       GrNastavV∞stup(mod_GRAFIKA_VφSTUP_MOJEPLOCHA);
  551.       }
  552.     if(StrKopie(mod_ZapisovatProtokol_Název, 1, 1) != ":") mod_ZapisovatProtokol_Název = "*\\" + mod_ZapisovatProtokol_Název;
  553.  
  554.     // INFORMACE O N╡ZVU SOUBORU, KAM ZAPISOVAT PROTOKOL O VφPO¼TU
  555.     if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  556.       mod_VypiτHláτku("Zvolen soubor "+mod_ZapisovatProtokol_Název+"...", mod_VYPIµHL╡µKU_VY¼KEJ);
  557.       }
  558.     }
  559.   }
  560.  
  561. void modCesta_OptimalizaceVstupu(void) {
  562.   }
  563.  
  564. void modCesta_OpakováníInicializace(void) {
  565.   modCesta_Cesta[modCesta_Θroveσ] = 0;
  566.   }
  567.  
  568. int modCesta_OpakováníTest(void) {
  569.   // kdyº je jeτt╪ jaké spojnice procházet (procházení jeτt╪ nebylo dokonƒeno)
  570.   if(modCesta_Cesta[modCesta_Θroveσ] < modCesta_PoƒetSpojnic) {
  571.     // p²ipoƒtení hodnoty atributu práv╪ procházené spojnice k souƒtu hodnot atributà celé cesty
  572.     modCesta_SouƒetSpojnic += modCesta_Spojnice[modCesta_Cesta[modCesta_Θroveσ]].Atribut;
  573.     // vrácení informace o tom, ∞e se má pokraƒovat v procházení
  574.     return 1;
  575.     }
  576.   else {
  577.     // vrácení informace o tom, ∞e procházení jiº bylo dokonƒeno
  578.     return 0;
  579.     }
  580.   }
  581.  
  582. void modCesta_OpakováníIterace(void) {
  583.   // odeƒtení hodnoty atributu práv╪ procházené spojnice od souƒtu hodnot atributà celé cesty
  584.   modCesta_SouƒetSpojnic -= modCesta_Spojnice[modCesta_Cesta[modCesta_Θroveσ]].Atribut;
  585.   // p²echod k následující spojnici
  586.   modCesta_Cesta[modCesta_Θroveσ]++;
  587.   }
  588.  
  589. void modCesta_Dalτí¼lánek_P²ed(void) {
  590.   // zv∞τení úrovn╪ backtrackingu (poƒet spojnic v práv╪ testované cest╪)
  591.   modCesta_Θroveσ++;
  592.   }
  593.  
  594. void modCesta_Dalτí¼lánek_Po(void) {
  595.   // zmenτení úrovn╪ backtrackingu (poƒet spojnic v práv╪ testované cest╪)
  596.   modCesta_Θroveσ--;
  597.   }
  598.  
  599. int modCesta_TestVyhovuje(void) {
  600.   int modCesta_Procházen∞Prvek;
  601.   struct modCesta_TypSpojnice modCesta_ProcházenáSpojnice;
  602.  
  603.   // zjiτt╪ní, zda nalezená pozice vyhovuje podmínkám úlohy
  604.  
  605.   // kontrola, zda práv╪ p²idaná spojnice navazuje na p²edchozí spojnici
  606.   struct modCesta_TypSpojnice modCesta_P²edchozíSpojnice;
  607.   struct modCesta_TypSpojnice modCesta_P²edp²edchozíSpojnice;
  608.   int modCesta_NavazovanéMísto;
  609.   int modCesta_P²idávanéMísto;
  610.   modCesta_ProcházenáSpojnice = modCesta_Spojnice[modCesta_Cesta[modCesta_Θroveσ]];
  611.   // zjiτt╪ní p²edchozí a p²edp²edchozí spojnice
  612.   if(modCesta_Θroveσ == 0) {
  613.     // pokud se jedná o první spojnici na cest╪
  614.     modCesta_P²edchozíSpojnice.Místo1 = 0;
  615.     modCesta_P²edchozíSpojnice.Místo2 = 0;
  616.     modCesta_P²edp²edchozíSpojnice.Místo1 = 0;
  617.     modCesta_P²edp²edchozíSpojnice.Místo2 = 0;
  618.     }
  619.   else if(modCesta_Θroveσ == 1) {
  620.     // pokud se jedná o druhou spojnici na cest╪
  621.     modCesta_P²edchozíSpojnice = modCesta_Spojnice[modCesta_Cesta[modCesta_Θroveσ-1]];
  622.     modCesta_P²edp²edchozíSpojnice.Místo1 = 0;
  623.     modCesta_P²edp²edchozíSpojnice.Místo2 = 0;
  624.     }
  625.   else {
  626.     // pokud se nejedná o první ani o druhou spojnici na cest╪
  627.     modCesta_P²edchozíSpojnice = modCesta_Spojnice[modCesta_Cesta[modCesta_Θroveσ-1]];
  628.     modCesta_P²edp²edchozíSpojnice = modCesta_Spojnice[modCesta_Cesta[modCesta_Θroveσ-2]];
  629.     }
  630.   // rozliτení navazovaného a p²idávaného místa
  631.   if((modCesta_ProcházenáSpojnice.Místo1 == modCesta_P²edchozíSpojnice.Místo1 && (modCesta_P²edchozíSpojnice.Místo2 == modCesta_P²edp²edchozíSpojnice.Místo1 || modCesta_P²edchozíSpojnice.Místo2 == modCesta_P²edp²edchozíSpojnice.Místo2)) ||
  632.      (modCesta_ProcházenáSpojnice.Místo1 == modCesta_P²edchozíSpojnice.Místo2 && (modCesta_P²edchozíSpojnice.Místo1 == modCesta_P²edp²edchozíSpojnice.Místo1 || modCesta_P²edchozíSpojnice.Místo1 == modCesta_P²edp²edchozíSpojnice.Místo2))) {
  633.     modCesta_NavazovanéMísto = modCesta_ProcházenáSpojnice.Místo1;
  634.     modCesta_P²idávanéMísto = modCesta_ProcházenáSpojnice.Místo2;
  635.     }
  636.   else if((modCesta_ProcházenáSpojnice.Místo2 == modCesta_P²edchozíSpojnice.Místo1 && (modCesta_P²edchozíSpojnice.Místo2 == modCesta_P²edp²edchozíSpojnice.Místo1 || modCesta_P²edchozíSpojnice.Místo2 == modCesta_P²edp²edchozíSpojnice.Místo2)) ||
  637.      (modCesta_ProcházenáSpojnice.Místo2 == modCesta_P²edchozíSpojnice.Místo2 && (modCesta_P²edchozíSpojnice.Místo1 == modCesta_P²edp²edchozíSpojnice.Místo1 || modCesta_P²edchozíSpojnice.Místo1 == modCesta_P²edp²edchozíSpojnice.Místo2))) {
  638.     modCesta_NavazovanéMísto = modCesta_ProcházenáSpojnice.Místo2;
  639.     modCesta_P²idávanéMísto = modCesta_ProcházenáSpojnice.Místo1;
  640.     }
  641.   else {
  642.     // vrácení informace, ºe nalezená pozice nevyhovuje podmínkám úlohy
  643.     return 0;
  644.     }
  645.  
  646.   // kontrola, zda n╪které z míst jiº v cest╪ obsaºen∞ch není shodné s místem práv╪ do cesty p²idan∞m prost²ednictvím práv╪ p²idané spojnice
  647.   for(modCesta_Procházen∞Prvek=0; modCesta_Procházen∞Prvek<modCesta_Θroveσ; modCesta_Procházen∞Prvek++) {
  648.     modCesta_ProcházenáSpojnice = modCesta_Spojnice[modCesta_Cesta[modCesta_Procházen∞Prvek]];
  649.     if(modCesta_ProcházenáSpojnice.Místo1 == modCesta_P²idávanéMísto || modCesta_ProcházenáSpojnice.Místo2 == modCesta_P²idávanéMísto) {
  650.       // vrácení informace, ºe nalezená pozice nevyhovuje podmínkám úlohy
  651.       return 0;
  652.       }
  653.     }
  654.  
  655.   // je testovaná pozice stále lepτí neº doposud nejlepτí nalezené ²eτení?
  656.   if(modCesta_Jak∞SouƒetSpojnicHledat == modCesta_NEJMENµ╓_SOU¼ET && !(modCesta_SouƒetSpojnic < modCesta_Nejlepτíⁿeτení_SouƒetSpojnic)) {
  657.     // ne, není => pozice tedy není vyhovující (hledá se jen to nejlepτí ²eτení)
  658.     return 0;
  659.     }
  660.   // pozn.: p²i hledání co nejv╪tτího souƒtu nelze rozhodovat jiº o kvalit╪ ƒásteƒného ²eτení (tj. na tomto míst╪), lze tak uƒinit aº p²i nalezení kompletního ²eτení
  661.  
  662.   // zobrazení práv╪ testované pozice, pokud si uºivatel toto nastavil
  663.   if(mod_ZobrazovanéPozice == mod_VµECHNY_POZICE) {
  664.     if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  665.       TxtPiτⁿet╪zec(modCesta_PoleCestyNaⁿet╪zec(modCesta_Cesta, &modCesta_Θroveσ, &modCesta_SouƒetSpojnic));
  666.       TxtPiτNov∞ⁿádek();
  667.       }
  668.     else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  669.       modCesta_VykresliMapu(modCesta_Cesta, modCesta_Θroveσ);
  670.       if(modCesta_PoƒetSpojnic > 1 && modCesta_PoƒetSpojnic <= 10) ¼ekej(1.0/modCesta_PoƒetSpojnic*6000-200);
  671.       }
  672.     if(mod_ZapisovatProtokol) {
  673.       SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "Testuji ");
  674.       SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, modCesta_PoleCestyNaⁿet╪zec(modCesta_Cesta, &modCesta_Θroveσ, &modCesta_SouƒetSpojnic));
  675.       SouborPiτNov∞ⁿádek(mod_ZapisovatProtokol_Soubor);
  676.       }
  677.     }
  678.  
  679.   // vrácení informace, ºe nalezená pozice vyhovuje podmínkám úlohy
  680.   return 1;
  681.   }
  682.  
  683. int modCesta_TestNalezeno(void) {
  684.   // nov∞ kandidát na ²eτení byl nalezen, pokud je práv╪ nalezené ²eτení kompletní
  685.   struct modCesta_TypSpojnice modCesta_TestovanáSpojnice;
  686.   modCesta_TestovanáSpojnice = modCesta_Spojnice[modCesta_Cesta[modCesta_Θroveσ]];
  687.   return (modCesta_TestovanáSpojnice.Místo1 == modCesta_PoƒetMíst-1 || modCesta_TestovanáSpojnice.Místo2 == modCesta_PoƒetMíst-1);
  688.   }
  689.  
  690. void modCesta_Nalezeno(void) {
  691.   // je nalezené ²eτení lepτí neº doposud nejlepτí nalezené?
  692.   if(modCesta_Jak∞SouƒetSpojnicHledat == modCesta_NEJV╖Tµ╓_SOU¼ET && !(modCesta_SouƒetSpojnic > modCesta_Nejlepτíⁿeτení_SouƒetSpojnic)) {
  693.     // ne, není => ²eτení nemá smysl zaznamenávat (hledá se jen to nejlepτí)
  694.     return;
  695.     }
  696.   // pozn.: p²i hledání co nejv╪tτího souƒtu nelze rozhodovat jiº o kvalit╪ ƒásteƒného ²eτení (jako se tomu d╪je p²i hledání nejmenτího souƒtu), lze tak uƒinit aº p²i nalezení kompletního ²eτení (tj. na tomto míst╪)
  697.   // ano => uloºení nalezeného ²eτení jako dosud nejlepτího
  698.   memmove(modCesta_Nejlepτíⁿeτení_Cesta, modCesta_Cesta, modCesta_PoƒetMíst*sizeof(modCesta_Cesta[0]));
  699.   modCesta_Nejlepτíⁿeτení_SouƒetSpojnic = modCesta_SouƒetSpojnic;
  700.   modCesta_Nejlepτíⁿeτení_Θroveσ = modCesta_Θroveσ;
  701.   // zobrazení práv╪ nalezeného ²eτení
  702.   if(mod_ReºimObrazovky == mod_TEXTOVφ_REªIM) {
  703.     TxtPiτⁿet╪zec("Nalezeno dosud nejlepτí ²eτení: ");
  704.     TxtPiτⁿet╪zec(modCesta_PoleCestyNaⁿet╪zec(modCesta_Cesta, &modCesta_Θroveσ, &modCesta_SouƒetSpojnic));
  705.     TxtPiτNov∞ⁿádek();
  706.     }
  707.   else if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM) {
  708.     mod_VypiτHláτku("Nalezeno dosud nejlepτí ²eτení: " + modCesta_PoleCestyNaⁿet╪zec(modCesta_Cesta, &modCesta_Θroveσ, &modCesta_SouƒetSpojnic), mod_VYPIµHL╡µKU_NE¼EKEJ);
  709.     if(mod_ZobrazovanéPozice == mod_POUZE_ⁿEµEN╓) modCesta_VykresliMapu(modCesta_Nejlepτíⁿeτení_Cesta, modCesta_Nejlepτíⁿeτení_Θroveσ);
  710.     }
  711.   // zápis práv╪ nalezeného ²eτení do souboru, pokud si to uºivatel p²ál
  712.   if(mod_ZapisovatProtokol) {
  713.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, "NALEZENO DOSUD NEJLEPµ╓ ⁿEµEN╓: ");
  714.     SouborPiτⁿet╪zec(mod_ZapisovatProtokol_Soubor, modCesta_PoleCestyNaⁿet╪zec(modCesta_Cesta, &modCesta_Θroveσ, &modCesta_SouƒetSpojnic));
  715.     SouborPiτNov∞ⁿádek(mod_ZapisovatProtokol_Soubor);
  716.     }
  717.   // v p²ípad╪ grafického reºimu, pokud se ale nezobrazují pouze nalezená ²eτení, pípnutí - oznámení nalezení nového nejlepτího ²eτení
  718.   if(mod_ReºimObrazovky == mod_GRAFICKφ_REªIM && !(mod_ZobrazovanéPozice == mod_POUZE_ⁿEµEN╓)) { Tón(1000); ¼ekej(100); VypniTón(); }
  719.   // vyƒkání na stisk klávesy, pokud si to uºivatel p²ál
  720.   if(mod_¼ekatNaKlávesu) ¼ekejNaKlávesu();
  721.   }
  722.  
  723. void modCesta_InfoOModulu(struct _ModulInfo* ModulInfo) {
  724.   ModulInfo->KrátkéJméno = "Cesta";
  725.   ModulInfo->DlouhéJméno = "Hledání nejlepτí cesty";
  726.   ModulInfo->Popis = "P²i cestování se ƒlov╪k ƒasto ocitne v situaci, kdy má k dispozici n╪kolik ràzn∞ch cest, kter∞mi se màºe vydat. Ideální samoz²ejm╪ je zvolit tu nejlepτí (nejkratτí, ƒasov╪ nejmén╪ nároƒnou, nejlevn╪jτí...). Jak ji ale poznat, pokud se n╪které z nabízejících se cest jeτt╪ dále rozd╪lují a jiné naopak spojují - kdyº je sí£ cest p²íliτ sloºitá? Tady letm∞ pohled nepomàºe, pro nalezení té nejlepτí cesty se prost╪ musí vyzkouτet vτechny moºnosti. Tento modul vyuºívá algoritmus backtrackingu k vyhledání nejlepτí cesty za vás.";
  727.   ModulInfo->Verze = 1.0;
  728.   ModulInfo->Datum.Den = 20;
  729.   ModulInfo->Datum.M╪síc = 9;
  730.   ModulInfo->Datum.Rok = 2002;
  731.   ModulInfo->Autor = "Marek Blahuτ";
  732.   ModulInfo->Kontakt = "blahus@seznam.cz";
  733.   ModulInfo->Start = &modCesta_Start;
  734.   ModulInfo->Hotovo = &modCesta_Hotovo;
  735.   ModulInfo->Θklid = &modCesta_Θklid;
  736.   ModulInfo->ZadáníVstupu = &modCesta_ZadáníVstupu;
  737.   ModulInfo->OptimalizaceVstupu = &modCesta_OptimalizaceVstupu;
  738.   ModulInfo->OpakováníInicializace = &modCesta_OpakováníInicializace;
  739.   ModulInfo->OpakováníTest = &modCesta_OpakováníTest;
  740.   ModulInfo->OpakováníIterace = &modCesta_OpakováníIterace;
  741.   ModulInfo->Dalτí¼lánek_P²ed = &modCesta_Dalτí¼lánek_P²ed;
  742.   ModulInfo->Dalτí¼lánek_Po = &modCesta_Dalτí¼lánek_Po;
  743.   ModulInfo->TestVyhovuje = &modCesta_TestVyhovuje;
  744.   ModulInfo->TestNalezeno = &modCesta_TestNalezeno;
  745.   ModulInfo->Nalezeno = &modCesta_Nalezeno;
  746.   }
  747.