Крыса в лабиринте, использующая стеки

#c #loops #stack

Вопрос:

  - mark[1,0]=1; top=1; stack[top].row=1; stack[top].col=0;   
   stack[top].dir=1; while (top>0) {
       loc = pop();
       cr=loc.row; cc=loc.col; cd=loc.dir;
       while (cd <= 4) {
            nr=cr move[cd].r;  nc=cc move[cd].c;
            if (nr==grow amp;amp; nc==gcol) {
                 for(i=0; i<=top; i  ) printLoc(stack[i]);
                 print(cr, cc); print(grow, gcol);
                 return;
            }
            if (maze[nr][nc]==0 amp;amp; mark[nr][nc]==0) {
                 mark[nr][nc] = 1;
                 loc.row=cr; loc.col=cc; loc.dir=cd 1;
                 push(loc);
                 cr=nr; cc=nc; cd=1;
            }
            else cd=cd 1;
       } } print(“no path in maze”);
 

Я изучаю этот алгоритм уже около часа, но все еще не могу его понять.
Я понимаю, что col/строка/направление = столбец, строка, направление и отметка означают 2-мерный массив. Но я не могу понять, как реализовать этот алгоритм и превратить его в код, так как не могу понять, как он работает.
Не мог бы кто-нибудь объяснить этот алгоритм, пожалуйста?

Дополнительная информация: 1 = 0,1(перемещение вправо), 2 = 1,0(перемещение вниз), 3 = 0, -1(перемещение влево), 4 = -1,0(перемещение вверх). Для хранения пути используйте стек. Если вы используете стек, выберите поиск по глубине, если вы используете очередь, выберите поиск по ширине. 1-заблокированный путь, а 0-путь, по которому вы можете идти.

Комментарии:

1. Учитывая, что псевдокод уже очень похож на C, тогда не должно быть слишком сложно скопировать и вставить его в исходный файл. Хотя, если вы не понимаете алгоритм или сам код, это сделает вас программистом культа карго , что не очень хорошо. Где вы нашли этот псевдокод? Какая документация связана с кодом, в котором вы его нашли? Какой еще ресурс у вас есть о проблеме и возможных решениях?

2. Попытка разобраться в этом коде без какой-либо дополнительной информации является серьезной проблемой. Т. е. maze содержит нулевые и ненулевые значения, но не ясно, что они означают. Одно «разрешено», другое «запрещено», но если нам придется все выяснить, это займет у нас много времени. Что вам сказали, и что вы выяснили сами? Вы не можете просто смотреть на алгоритм и ожидать, что внезапно все поймете.

3. 1 = 0,1(перемещение вправо), 2 = 1,0(перемещение вниз), 3 = 0, -1(перемещение влево), 4 = -1,0(перемещение вверх). Для хранения пути используйте стек. Если вы используете стек, выберите поиск по глубине, если вы используете очередь, выберите поиск по ширине. 1-заблокированный путь, а 0-путь, по которому вы можете идти. Это все, что я мог перевести. Я студент по обмену, обучающийся на языке, которым я не владею в совершенстве, поэтому понять программирование без понимания профессора немного сложно.

4. Мне все еще неясно, какова ваша главная цель: а) реализовать этот алгоритм и превратить его в код или б) понять, как он работает.