Пытаюсь внедрить робота-исследователя сетки.Что я делаю неправильно? - PullRequest
0 голосов
/ 09 октября 2018

Рассмотрим «робота», который может двигаться только вперед и поворачивать влево или вправо.Робот движется по сетке с открытыми и заблокированными вершинами.Робот может двигаться только к открытой вершине.Необходимо изучить все возможные открытые вершины и вернуться в исходное положение.

Я пытался реализовать его как 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`

Сейчас эта версия, как и многие из них ранее, повторяется бесконечно.У меня вопрос, что я делаю не так?(Или, что еще лучше, я что-то делаю правильно?) Я пытался найти способ проверить соседние вершины, но, похоже, ничего не дает никакого значимого результата.Я хочу, по крайней мере, иметь возможность исследовать сетку, а затем сосредоточиться на возвращении робота обратно.Любой совет приветствуется, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...