Hoy lidi potreboval bych pomoct mam program Kun ktery se pohybuje po sachovnici, ale musim to udelat aby se pohyboval pomoci pravidla Toroidu...... vím jak by to melo fungovat mely by se prepocitat hodnoty ale nevim jak a kde fto mam dat... a nevim ani jak by funkce mela vypadat... pomohl by mi nekdo? zde je kod programu kdy se pohybuje po sachovnici
#include <stdio.h>
// velikost sachovnice
const int BoardSize = 8;
// deklarace typu sachovnice
typedef int tBoard[BoardSize][BoardSize];
// pocet moznych tahu konem
const int NoOfHorseMoves = 8;
// zmeny souradnic pro 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};
// deklarace typu pro ulozeni pozice
struct Position
{
int Row;
int Col;
};
// inicializace sachovnice
void InitBoard(tBoard& Board)
{
for(int i=0; i<BoardSize; i++)
for(int j=0; j<BoardSize; j++)
Board[i][j] = 0;
}
// zobrazeni 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 konem po sachovnici
// Pos -- aktualni poloha kone na sachovnici
// MoveIndex -- kolikaty z 8 moznych tahu provadime
// Funkce vraci novou polohu kone
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 zda je tah platny
// Vraci true pokud je tah na pozici Pos na sachovnici dane parametrem 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;
}
// Rekurzivni hledani reseni problemu, metoda backtracking
// Parametry:
// Board -- aktualni sachovnice, 0 znamena volne policko, cislo ruzne od 0 znamena poradi tahu kterym se sem kun dostal
// CurrentPos -- aktualni poloha kone
// MoveNumber -- poradi tahu, ktery provadime
// Funkce vraci true , pokud bylo nalezeno reseni
bool Horse(tBoard& Board, const Position& CurrentPos, const int MoveNumber)
{
if (MoveNumber == 1+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);
Board[InitPos.Row][InitPos.Col] = 1;
bool HasSolution = Horse(Board, InitPos, 2);
if (HasSolution)
{
PrintBoard(Board);
}
else
{
printf ("Reseni nenalezeno!\n");
}
}
Diky vsem za jakoukoliv pomoct a dekuju mejte se