Рассмотрим «робота», который может двигаться только вперед и поворачивать влево или вправо.Робот движется по сетке с открытыми и заблокированными вершинами.Робот может двигаться только к открытой вершине.Необходимо изучить все возможные открытые вершины и вернуться в исходное положение.
Я пытался реализовать его как DFS, но по какой-то причине не могу заставить его работать.Вот что у меня есть (некоторые части опущены для ясности):
void DFS() {
switch (dir){
// int dir represents direction of robot, 0-east, 1-north,
// 2-west,3-south
// int visit[][] is an array that keeps track of cells visited
// int board[][] is the board on which the robot moves
// (element of board equals 1 if open, 0 if blocked).
// each time a move_forward() is called
// the robot either moves in its current direction
// or does not move, depending on the cell ahead (blocked or open)
case 0:
if (move_forward()==0){
if (visit[posx][posy+1]<1 && board[posx][posy+1]==OPEN){
turn_left();
} else if (visit[posx][posy-1]<1 && board[posx][posy-1]==OPEN ){
turn_right();
} else {
turn_right();
turn_right();
move_forward(); // This is where I try to make the
//robot start returning
}
break;
}
else
{DFS();}
case 1: ....
case 2: ....
case 3: .... // omitted cases are same as case 0, basically`
Сейчас эта версия, как и многие из них ранее, повторяется бесконечно.У меня вопрос, что я делаю не так?(Или, что еще лучше, я что-то делаю правильно?) Я пытался найти способ проверить соседние вершины, но, похоже, ничего не дает никакого значимого результата.Я хочу, по крайней мере, иметь возможность исследовать сетку, а затем сосредоточиться на возвращении робота обратно.Любой совет приветствуется, спасибо.