0 / 0 / 0
Регистрация: 13.04.2015
Сообщений: 3
1

Нужен совет в реализации волнового алгоритма

13.04.2015, 16:55. Показов 1100. Ответов 1
Метки нет (Все метки)

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
program E;
uses crt;
const
a:array[1..10,1..10] of byte = ((0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
                                (1, 0, 0, 0, 0, 1, 0, 0, 1, 0),
                                (0, 0, 0, 1, 1, 1, 0, 0, 1, 1),
                                (0, 1, 0, 0, 0, 1, 0, 0, 1, 0),
                                (0, 0, 0, 0, 1, 1, 1, 0, 1, 0),
                                (0, 0, 1, 1, 1, 0, 1, 0, 0, 0),
                                (0, 0, 0, 1, 0, 0, 1, 0, 0, 0),
                                (1, 1, 0, 1, 0, 0, 1, 1, 1, 0),
                                (0, 1, 0, 0, 0, 0, 1, 0, 0, 0),
                                (0, 1, 0, 0, 0, 0, 1, 0, 0, 0));
var
i,j,z,zz,m,x,num,u:integer;
xs,ys,xe,ye:integer;
label 1,2,3,4,5;
begin
clrscr;
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
{a[i,j]:=random(2);}
write (a[i,j], ' ');
end;
writeln;
end;
 
writeln ('vvedite X1 i Y1 Start');
readln(xs,ys);
writeln('vvedite X2 i Y2 End');
readln(xe,ye);
if (a[xs,ys]=1) then
writeln ('Nevernii Start (1-eto block)')
else
writeln('Start ','[',xs,':',ys,']');
if (a[xe,ye]=1) then
writeln ('Nevernii End (1-eto block)')
else
writeln('End ','[',xe,':',ye,']');
writeln;
u:=0;
num:=0;
m:=ys;
x:=ye;
i:=xs;
While (i<>xe) and  (m<>ye)  do
begin
 
 
{1 modul s usloviem i+1;j}
1:
u:=0;
While u=0 do
begin
 
i:=i+1;
if (i=11) then
begin
u:=u+1;
i:=i-1;
 
end;
if (a[i,m]=0) then
begin
num:=num+1;
writeln(i,':',m,' idem dalshe',' hod# ',num);
end
else
u:=u+1;
if (i=xe) and  (m=ye) then
begin
writeln('URA!URA! Tocha B naidena','Shagov = ',num);
goto 5;
end;
end;
 
 
{2 modul s usloviem i;j-1}
2:
u:=0;
While u=0 do
begin
m:=m-1;
if (m=0) then
begin
u:=u+1;
m:=m+1;
 
end;
if (a[i,m]=0) then
begin
num:=num+1;
writeln(i,':',m,' idem dalshe',' hod# ',num);
end
else
u:=u+1;
if (i=xe) and  (m=ye) then
begin
writeln('URA!URA! Tocha B naidena','Shagov = ',num);
goto 5;
end;
end;
 
 
{3 modul s usloviem i-1;j}
3:
u:=0;
While u=0 do
begin
i:=i-1;
if (i=0) then
begin
u:=u+1;
i:=i+1;
 
end;
if (a[i,m]=0) then
begin
num:=num+1;
writeln(i,':',m,' idem dalshe',' hod# ',num);
end
else
u:=u+1;
if (i=xe) and  (m=ye) then
begin
writeln('URA!URA! Tocha B naidena','Shagov = ',num);
goto 5;
end;
end;
 
 
{4 modul s usloviem i;j+1}
4:
u:=0;
While u=0 do
begin
m:=m+1;
if (m=11) then
begin
u:=u+1;
m:=m-1;
goto 1;
end;
if  (a[i,m]=0) then
begin
num:=num+1;
writeln(i,':',m,' idem dalshe',' hod# ',num);
end
else
u:=u+1;
if (i=xe) and  (m=ye) then
begin
writeln('URA!URA! Tocha B naidena','Shagov = ',num);
goto 5;
end;
end;
 
 
end;
5:
readln;
end.
Программа должна двигать как змейка, или похоже но она зацикливаеться. Работает лишь в случае Старт 1 8 и Финиш 10 10.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2015, 16:55
Ответы с готовыми решениями:

Помощь в реализации линейного алгоритма
Здравствуйте. Очень нужна ваша помощь в решении следующих задач: 1. Написать программу...

Для реализации разветвляющего алгоритма
На паскале

Программа реализации линейного алгоритма, принадлежность точки к координатам
Доброго времени суток. Очень нужна ваша помощь в решении следующих задач: 1. Написать программу,...

Тонкости реализации волнового алгоритма в RTS
Разрабатываю RTS, подобие Dune 2 и KKnD. Есть квадратное поле, разбитое на ячейки (двухмерный...

1
Модератор
Эксперт по электронике
8276 / 4180 / 1595
Регистрация: 01.02.2015
Сообщений: 12,998
Записей в блоге: 3
13.04.2015, 21:05 2
Закидаю ссылками
1. Wikipedia.
2. Algolist manual.
3. Wikibooks.
3. Мой вариант реализации.

Смысл алгоритма такой:
1. Стартовую клетку записываем в "очередь". И помечаем её как рассмотренную (давая порядковый номер 2 - отличный от "стена" и "проход").
2. Извлекаем следующий элемент (клетку) из очереди. И соседей которые не проверялись и не "стены" записываем в очередь. Помечаем соседей номерами, равными +1 к номеру клетки из очереди.
3. Выполняем пункт 2 до опустошения очереди.

Теперь, если распечатать лабиринт - будут видны стены, а в местах проходов будут стоять числа, равные удалённости от стартовой клетки. И путь от начала к концу ищется в обратном направлении - становимся на конечную клетку, берём её номер, и среди соседей ищем номер на 1 меньший - записываем в стек. Для новой клетки повторяем поиск соседей. И так, до попадания в начальную клетку. Путь найден и сохранён в стеке. Извлекаем из стека и визуализуем.

Это теория. Конкретно в твоей программе сложно разобраться, но, кажется, что не реализована очередь.

Есть ещё другой вариант - поиск в глубину. Он рекурсивный. Менее оптимальный. Результат - не всегда кратчайший путь. Пример я приводил здесь, ошибочно назвав его bfs.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2015, 21:05
Помогаю со студенческими работами здесь

Нужне совет по реализации алгоритма
a1, (a1+a2), (a1+a2+a3), ... , (a1+a2+...aN)

Нужен совет по реализации
Всем привет! 2 года прогаю на джаве, сейчас сел решать задачу на VBA, только знакомлюсь. У меня...

Нужен совет по поводу реализации
Здравствуйте. Пишу я дипломную работу на тему &quot;Информационно-аналитическая система для...

Нужен совет по реализации проекта на Woocommerce
Товарищи специалисты! Интересует ваше мнение о том, как лучше подступиться к данному проекту. В...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru