Мне нужно написать код SML, чтобы решить проблему с рыцарским туром в обратном направлении.Шахматный рыцарь должен бегать по всей шахматной доске (размер: NxN
) и должен посещать каждый квадрат ровно один раз (нет необходимости возвращаться в первый квадрат в конце).
Я уже записал все функции длясоздайте пустую доску, чтобы установить или получить квадраты на доске, чтобы получить список возможных ходов коня.Но я понятия не имею, как написать рекурсивную функцию в SML (я знаю, как написать этот алгоритм на C, но не на SML).
Алгоритм на C для шахматной доски 8x8
dl and dr are array : (delta to calculate next moves)
dl = [-2,-2, -1, 1, 2, 2, 1, -1]
dr = [-1, 1, 2, 2, 1, -1,-2, -2]
bool backtracking(int** board, int k/*current step*/, int line, int row, int* dl, int* dr)
{
bool success = false;
int way = 0;
do{
way++;
int new_line = line + dl[way];
int new_row = row + dr[way];
if(legal_move(board, new_line, new_row))
{
setBoard(board,new_line, new_row,k); //write the current step number k in board
if(k<64)
{
success = backtracking(board, k+1, new_line, new_row, dl, dc);
if(!success)
{
setBoard(board,new_line, new_row,0);
}
}
else
success = true;
}
}
while(!(success || way = 8));
return success;
}