Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 26.12.2014
Сообщений: 37
1

Поиск путей из центра лабиринта до края

06.06.2016, 20:16. Показов 1306. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется прога лабиринт, суть поймете, прочитав код.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Program LABIRINT;
Const N=11; {размер лабиринта NxN клеток}
Type Field=Array[l..N,l..N] Of Char;
Var LAB: Field;
Procedure GO(LAB: Field; X,Y: Integer);
Begin
{Поиск путей из центра лабиринта до края - каждый найденный путь печатается)
End;
Begin
{Ввод лабиринта}
GO(LAB, N Div 2 + 1, N Div 2 + 1) {начинаем с середины}
End.
 
Procedure GO(LAB: Field; X,Y: Integer); 
Begin
If {клетка (х, у) свободна}
Then
Begin   {шаг на клетку (х,у)} 
If {дошли до края лабиринта} 
    Then {печатается найденный путь} 
    Else {попытка сделать шаг в соседние клетки в условленной последовательности} 
    {возвращение на один шаг назад} 
End 
End;
Для вывода найденных траекторий составляется процедура PRINTLAB. 
В окончательном виде программа будет выглядеть так:
 
Program LABIRINT;
Const N=11; {размер лабиринта NxN клеток}
Type Field=Array[I..N, 1..N] Of Char;
Var LAB: Field; X,Y: Integer;
Procedure PRINTLAB(LAB: Field);
{Печать найденного пути в лабиринте}
Var X,Y: Integer;
Begin
For X:=l To N Do 
Begin
For Y:=l To N Do 
Write(LAB[X,Y]); 
WriteLn 
 End; 
WriteLn 
End; {печати}
Procedure GO(LAB: Field; X,Y: Integer); 
Begin
If LAB[X,Y]=' ' {если клетка свободна}
Then
Begin
LAB[X,Y]:='+'; {делается шаг}
If (X=l) Or (X=N) Or (Y=l) Or (Y=N) {край}
Then
PRINTLAB(LAB){печатается найденный путь} 
Else
Begin {поиск следующего шага} 
GO(LAB,X+1,Y); 
GO(LAB,X, Y+l); 
GO(LAB,X-1,Y); 
GO(LAB,X,Y-1) 
End;
LAB[X,Y]:=' ' {возвращение назад} 
 End
End; {процедуры GO} 
Begin {основной программы} 
  {ввод лабиринта} 
   For X:=l To N Do 
Begin
For Y:=l To N Do
Read(LAB[X,Y]);
Readln
End;    
GO(LAB, N Div 2+1, N Div 2 + 1)  {начинаем с середины} 
End.
Задача: Изменить программу LABIRINT таким образом, чтобы на печать выводился лишь кратчайший путь из центра лабиринта до края.

Прошу поделиться советами
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2016, 20:16
Ответы с готовыми решениями:

Вывести любой из путей к выходу из лабиринта
Дан лабиринт n*m состоящий из символов "$" "#" " ". $-выход из лабиринта, #-стена, " "- проход....

Анимация: нарисовать зеленый квадрат, который будет двигаться от края до края окна
Здравствуйте. Нужно нарисовать зеленый квадрат, который будет двигаться от края до края окна и...

Поиск выхода из лабиринта
Доброго времени суток! Помогите написать процедуру использующую стек для отыскания прохода по...

Поиск выхода из лабиринта
Необходимо реализовать поиск выхода из лабиринта вот допустим лабиринт,но тут он выводит только...

1
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
07.06.2016, 06:15 2
Цитата Сообщение от Azamat009 Посмотреть сообщение
суть поймете, прочитав код.
Чтобы лучше понять „суть“, нужно запустить программу.
Ну, если учесть, что
— строки, помеченные как «код» с 1 по 27 нужно сразу удалить
— сделать несколько исправлений символов «I» и «l» на единичку
… запустив программу, я получил пустое окно, которое чего-то хочет.
Чего именно и сколько я гадать не захотел!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

По поводу алгоритма поиска кратчайшего пути (не связано с вашим проектом):

Для поиска, обычно, используют „волновой алгоритм“.
Описывать его здесь нет смысла, ибо о нём достаточно много информации в интернете.
Для начала прочтите в Википедии.
0
07.06.2016, 06:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2016, 06:15
Помогаю со студенческими работами здесь

Поиск выхода из лабиринта
Здравствуйте! Изучаю C#, застрял на одном моменте в задании. Суть такова: нужно найти выход из...

Поиск выхода из лабиринта
Такой вопрос. почему у меня не находит выход из лабиринта? предположительно ошибка в функции Solve...

Поиск выхода из лабиринта
Здравствуйте! Изучаю C#, застрял на одном моменте в задании. Суть такова: нужно найти выход из...

Исправить поиск выхода из лабиринта
Есть программа поиска выхода из лабиринта: #include <stdio.h> #include <io.h> #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru