Пусть T (x, y) будет количеством туров по сетке X × Y, таким образом:
- тур начинается в верхнем левом квадрате
- тур состоит изходов вверх, вниз, влево или вправо на один квадрат
- тур посещает каждый квадрат ровно один раз, а
- тур заканчивается в нижнем левом квадрате.
Легко видеть, например, что T (2,2) = 1, T (3,3) = 2, T (4,3) = 0 и T (3,4) = 4. Записатьпрограмма для вычисления T (10,4).
Я работал над этим часами ... Мне нужна программа, которая принимает размеры сетки в качестве входных данных и возвращает количество возможных туров?
Я работал над этим часами ... Мне нужна программа, которая принимает размеры сетки в качестве входных данных и возвращает количество возможных туров?
Я написал этот код для решенияпроблема ... Я не могу понять, как проверить все направления.
#include <iostream>
int grid[3][3];
int c = 0;
int main(){
solve (0, 0, 9);
}
int solve (int posx, int posy, steps_left){
if (grid[posx][posy] = 1){
return 0;
}
if (steps_left = 1 && posx = 0 && posy = 2){
c = c+1;
return 0;
}
grid[posx][posy] = 1;
// for all possible directions
{
solve (posx_next, posy_next, steps_left-1)
}
grid[posx][posy] = 0;
}
Алгоритм @KarolyHorvath Вам нужна некоторая структура данных, чтобы представить состояниеячейки в сетке (посещенные / не посещенные).
Ваш алгоритм:
step(posx, posy, steps_left)
if it is not a valid position, or already visited
return
if it's the last step and you are at the target cell
you've found a solution, increment counter
return
mark cell as visited
for each possible direction:
step(posx_next, posy_next, steps_left-1)
mark cell as not visited
и выполняется с шагом (0, 0, sizex * sizey)