| | |
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Autor | Správa |
---|
Registrovaný: 01.12.07 Prihlásený: 31.08.11 Príspevky: 49 Témy: 11 |
Zdrawim potreboval by som pomoct s upravenim zdrojového kódu:(Zdrojovy kod je implementovany v jazyku c++):
Je dána sachovnica o rozmeroch n x n.
Na sachovnici umiestníme do lubovolnj pozicie šachového kona, jazdce, ktorý sa pohybuje podla známých sachových pravidiel.
Úloha spocívá v tom, ze máme najst cestu kona po sachovnici tak, ze kazdé polícko navstíví iba raz tj. žiadné pole sa neopakuje a ziadné pole nieje vynechane.
Kód: #include <stdio.h>
//najmensia sachovnice musi byt 5
//najvetsia sachovnica musi byt 8
//velkost sachovnice
const int BoardSize = 8;
//deklaracia typu sachovnice
typedef int tBoard[BoardSize][BoardSize];
//pocet moznych tahov
const int NoOfHorseMoves = 8;
//zmeny suradnic pre jednotlive tahy
const int RowMoveDelta[NoOfHorseMoves] = {-2, -1, +1, +2, +2, +1, -1, -2};
const int ColMoveDelta[NoOfHorseMoves] = {+1, +2, +2, +1, -1, -2, -2, -1};
//deklaracia typu pre ulozenie pozicie
struct Position
{
int Row;
int Col;
};
//inicializacia sachovnice
void InitBoard(tBoard& Board)
{
for(int i = 0; i < BoardSize; i++)
for(int j = 0; j < BoardSize; j++)
Board[i][j] = 0;
}
//zobrazenie sachovnice
void PrintBoard(const tBoard& Board)
{
for(int i = 0; i < BoardSize; i++)
{
for(int j = 0; j < BoardSize; j++)
printf("%4i", Board[i][j]);
printf("\n");
}
printf("\n");
}
//posun kona po sachovnici
Position Move(const Position& Pos, const int MoveIndex)
{
Position p;
p.Row = Pos.Row + RowMoveDelta[MoveIndex];
p.Col = Pos.Col + ColMoveDelta[MoveIndex];
return p;
}
//test ci je tah platny
//vracia true pokial je tah na pozicii Pos na sachovnici dane parametrom Board mozny
bool IsValidMove(const Position& Pos, const tBoard Board)
{
bool Result = true;
Result &= 0 <= Pos.Row;
Result &= Pos.Row < BoardSize;
Result &= 0 <= Pos.Col;
Result &= Pos.Col < BoardSize;
Result &= Board[Pos.Row][Pos.Col] == 0;
return Result;
}
//rekurzivne hledanie riesenie problemu metoda backtracking
// Parametre:
// Board -- aktualna sachovnica, 0 znamena volne policko, cislo rozne od 0 znamena poradie tahu ktorym sa sem kon dostal
// CurrentPos -- aktualna poloha kona
// MoveNumber -- poradie tahu, ktory prevadzame
// Funkcia vracia true , pokial bolo najdene riesenie
bool Horse(tBoard& Board, const Position& CurrentPos,
const int MoveNumber)
{
if (MoveNumber == BoardSize*BoardSize)
return true;
for(int i = 0; i < NoOfHorseMoves; i++)
{
Position p = Move(CurrentPos, i);
if (IsValidMove(p, Board))
{
Board[p.Row][p.Col] = MoveNumber;
if (Horse(Board, p, MoveNumber+1))
return true;
else
Board[p.Row][p.Col] = 0;
}
}
return false;
}
void main()
{
tBoard Board;
Position InitPos = {0,0};
InitBoard(Board);
bool HasSolution = Horse(Board, InitPos, 1);
if (HasSolution)
{
PrintBoard(Board);
}
else
{
printf("Riesenie nenajdene!\n");
}
}
Tento kód funguje pre normalný typ sachovnice ale ked zmenim typ sachovnice na tvar toroidu? tak to nefunguje a cel by som to pomoct upravit aby to fungovalo na sachovnici tvaru n x n a tvaru toroidu...
Vazne by som vám bol vdačný za pomoc poprípade by som bol ochotný za neakú finančnú odmenu.
|
|
Registrovaný: 01.12.07 Prihlásený: 31.08.11 Príspevky: 49 Témy: 11 | Napísal autor témy undead111: 13.12.2009 21:59 | |
|
dik za pomoct uz som to viriesil...
|
|
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| 0 na Toroide v Elektronika | 17 | 1095 | 13.11.2016 23:34 mraudur | | označenie vodičov na toroide v Elektronika | 4 | 811 | 19.04.2010 16:03 xerox422 | | ako odstranit trojskeho kona z disku v Antivíry a antispywary | 7 | 7906 | 13.08.2008 15:34 majky358 | | Mal som virus trojskeho kona a nejak sa nedal odtranit... v Antivíry a antispywary | 12 | 1144 | 17.07.2007 13:21 Break | | pohyb v Grafické programy | 3 | 793 | 09.01.2008 12:03 Lepo | | Pohyb za kurzorom v JavaScript, VBScript, Ajax | 4 | 481 | 23.09.2010 23:02 KViki | | jQuery pohyb obrazku v JavaScript, VBScript, Ajax | 4 | 762 | 12.01.2011 18:54 TommyHot | | Program na pohyb obrazkov v Grafické programy | 10 | 1480 | 01.08.2008 20:27 dulius | | vysoke DPI oneskoreny pohyb v Externé zariadenia | 3 | 420 | 03.06.2012 15:42 noji | | skript na pohyb obrazkov v JavaScript, VBScript, Ajax | 2 | 766 | 27.12.2007 0:01 audiotrack | | C - pohyb po stlaceni klavesy v Assembler, C, C++, Pascal, Java | 6 | 555 | 17.04.2011 14:03 hradecek | | News.js - pohyb.novinky (help) v JavaScript, VBScript, Ajax | 4 | 2506 | 08.04.2008 0:34 mylan | | Ako sa zisti pohyb kolieska. v JavaScript, VBScript, Ajax | 1 | 470 | 07.11.2009 15:04 chrono | | Program na real time pohyb figur v Ostatné programy | 4 | 364 | 11.04.2012 11:48 reklamiak | | Pohyb v hre Second Life budú hráči kontrolovať myšlienk v Novinky | 1 | 424 | 23.11.2007 11:26 mimkork | | Problem s mysou vo Windows Vista (samovolny pohyb mysi) v Externé zariadenia | 2 | 1177 | 04.04.2010 17:50 Sano90 |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|