Динамическое программирование

На шахматной доске 8 × 8 клеток произвольным образом расставлены шахматные фигуры. Необходимо для указанной фигуры (задаются координаты этой фигуры на доске: M — координаты по вертикали, N — координаты по горизонтали) определить минимальную последовательность ходов, которую фигура может сделать, чтобы попасть в клетку с заданными координатами P и Q (или указать, что это не возможно). При движении указанной фигуры остальные фигуры на доске не двигаются (ни на каком из ходов), однако фигура не может останавливаться на клетках, занятых фигурами её цвета, и не может останавливаться на клетках, находящихся под боем фигур противника, но при этом может останавливаться на клетках, занятых фигурами противника (бить их, после чего они уже не могут угрожать другим фигурам).

Алгоритм нужно придумать для одной из фигур(ферзь, ладья, слон, конь).