Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
1

Поиск кратчайшего пути

24.04.2012, 17:22. Показов 3156. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот программа,там в справке всё описано как пользоваться). Можете по эксперементировать,там есть недочёты).
Вложения
Тип файла: rar SearchRoad.rar (8.5 Кб, 101 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2012, 17:22
Ответы с готовыми решениями:

Поиск кратчайшего пути
Саша и Маша путешествуют вдоль оси Ох на которой есть (неизвестное кол-во) достопримечательностей в...

Поиск кратчайшего пути
Задание: алгоритм задачи коммивояжера. Взять городов штук 5-7 и найти кратчайший путь из одного в...

Поиск кратчайшего пути
Всем доброго времени суток! Скажите, пожалуйста. Есть ли какие-то принципиальные отличия волнового...

Поиск кратчайшего пути
В одном массиве даны все возможные комбинации чисел (0,1,2,3,4). Представляют собой города. В...

21
213 / 137 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
24.04.2012, 17:29 2
NowMatrix, чтобы твою программу кто-то захотел скачать из вложения и протестировать, распишите поподробнее о ней. По себе скажу, что нет желания сейчас скачивать вложение, если вообще не догадываешься, о чем программа)
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
24.04.2012, 17:47  [ТС] 3
Tolias28, ну она строит кратчайший путь от точки А до точки В,при этом можно рисовать препятствия ..Как то так..)
Можно конечно там было ещё всяких "свистелок" накрутить,но мне было лень)
0
13 / 13 / 0
Регистрация: 11.01.2012
Сообщений: 158
24.04.2012, 18:38 4
Когда прокладываешь путь в препятсвие программа бесконечно выводит сообщение об ошибке.
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
24.04.2012, 23:01  [ТС] 5
Вот исправил.
Вложения
Тип файла: rar SearchRoad.rar (8.6 Кб, 38 просмотров)
0
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
25.04.2012, 03:12 6
а у меня маленький монитор, результат на картинке ( больше не ростягивается вправо)

1024х768

UPD кой как нажал ту кнопку что еле еле выглядывает. Поклацал пару квадратов , не знаю сколько раз нажал правой мышкой, вылезло сообщение "иногда тупим и не можем найти путь" и сразу же вылезло сообщение об ошибке.
UPD "иногда тупим блаблабла" жмем ок и сообщение об ошибке.
Миниатюры
Поиск кратчайшего пути  
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
25.04.2012, 17:00  [ТС] 7
petruchodd, доделал под ваши нужды. Ну и немного приукрасил). Правой кнопкой мыши достаточно 1 раз тыкнуть). Вот вся сборка с кодом,кому интересно и .exe отдельно.
Вложения
Тип файла: rar SearchRoadAll.rar (119.7 Кб, 74 просмотров)
Тип файла: rar SearchRoad.rar (8.6 Кб, 44 просмотров)
1
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
25.04.2012, 21:54 8
<censored> запустил,чё то не чего не показло , хотел выйти появилось сообщение "иногда не можем найти путь" нажимаю ок , нефига опять тоже самое , прога не закрывается ,пришлось диспетчером в топку отправить.
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
25.04.2012, 22:50  [ТС] 9
Ребят не знаю..у меня всё работает..Запускаем прогу,далее нажимаем кнопку "Начать" - появляется отправная точка(закрашенный зелёный прямоугольник) и сама сетка. Далее левой кнопкой мышки рисуем препятствия. И потом правой кнопкой кликаем куда прийти надо.Также пункт меню "Использовать диагональные пути" активирует возможность прохождения пути по диагонали. Вот скрины:
Миниатюры
Поиск кратчайшего пути   Поиск кратчайшего пути   Поиск кратчайшего пути  

Поиск кратчайшего пути  
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
25.04.2012, 22:55  [ТС] 10
Конечно можно было без кнопки "Начать",а в конструктор всё запихать...
0
1484 / 579 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
27.04.2012, 21:15 11
Программа что -то ищет, но точно не кратчайший путь.
Вариант программы - 17 ходов, мой вариант - 13
Миниатюры
Поиск кратчайшего пути  
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
27.04.2012, 21:34  [ТС] 12
Ну да,не всегда конечно кратчайший путь показывает,т.к. алгоритм хромает...Попробуйте включить диагональные пути.
0
180 / 85 / 10
Регистрация: 13.02.2010
Сообщений: 318
28.04.2012, 09:13 13
А почему не алгоритм Дейкстры?
0
98 / 81 / 16
Регистрация: 14.01.2011
Сообщений: 438
28.04.2012, 10:36  [ТС] 14
Dj_SheLL, ну мне этот понравился http://www.policyalmanac.org/g... al_rus.htm и решил его реализовать. Писали,что лучше чем алгоритм Дейкстры,но как выяснилось - нет. Теперь наверно переделаю,т.к. алгоритм Дейкстры уж точно наикратчайший путь найдёт.
0
0 / 0 / 1
Регистрация: 27.11.2012
Сообщений: 28
24.02.2013, 21:42 15
Здравствуйте. А по какому алгоритму искали путь? А то третий день бьюсь с маршрутным алгоритмом...на бумажке то понял, а закодить не могу. А курсач горит :c
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
24.02.2013, 22:09 16
Вообще для невзвешенного графа поиск в ширину лучше. В нём просто очередь вершин, а в алгоритме Дейкстры - поиск вершины с кратчайшим путём на каждой итерации.
0
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
12.05.2013, 16:35 17
Все протестировал.
1.В Справке пишите что надо нажимать на пустой прямоугольник а не на черный.
2.При тупике пишет Иногда тупим... бесконечное количество раз.
0
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 49
12.05.2013, 18:18 18
Если часто тыкать ЛКМ так, чтобы пути пересекались, выдаёт "Иногда тупим.." и это окно закрывается только через Диспетчер задач.
0
1484 / 579 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
11.06.2013, 11:50 19
Мой вариант на QBasic
QBasic/QuickBASIC
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
DECLARE SUB GRID ()
DECLARE SUB HELP ()
DECLARE SUB RESETWAY ()
DECLARE SUB DRAWWAY ()
DECLARE SUB BREAK ()
DECLARE SUB ROUTE (S AS INTEGER, F AS INTEGER)
DECLARE SUB CREATEMAP (P AS INTEGER)
DECLARE SUB DRAWCELL (CELL AS INTEGER)
DECLARE SUB DRAWMAP (S AS INTEGER, F AS INTEGER)
DECLARE SUB RESETMAS ()
DECLARE SUB LOADMOUSEDRV ()
DECLARE SUB MOUSEDRV (Func AS INTEGER)
 
DECLARE FUNCTION GETX% (CELL AS INTEGER)
DECLARE FUNCTION GETY% (CELL AS INTEGER)
DECLARE FUNCTION PAUSE% (P AS INTEGER)
 
TYPE MOUSESTATE
    B AS INTEGER
    X AS INTEGER
    Y AS INTEGER
END TYPE
 
TYPE CELL
    X AS INTEGER
    Y AS INTEGER
END TYPE
 
DIM SHARED MOUSECODE AS STRING, MOUSE AS MOUSESTATE
DIM S AS INTEGER, F AS INTEGER, P AS INTEGER
DIM SHARED MASX AS INTEGER, MASY AS INTEGER
REDIM SHARED B(0) AS INTEGER
 
RANDOMIZE TIMER
SCREEN 12
LOADMOUSEDRV
MASX = 40
MASY = 29
REDIM SHARED A(1, MASX - 1, MASY - 1)
REDIM B(0) AS INTEGER
S = -1
F = -1
RESETMAS
GRID
HELP
MOUSEDRV 1
DO WHILE INKEY$ <> CHR$(27)
    MOUSEDRV 3
    X = INT(MOUSE.X / 16)
    Y = INT(MOUSE.Y / 16)
    IF Y > 0 THEN
        COLOR 15
        LOCATE 1, 45: PRINT "X = "; X
        LOCATE 1, 55: PRINT "Y = "; Y - 1
        LOCATE 1, 67: PRINT RIGHT$("000" + LTRIM$(STR$(UBOUND(B))), 4);
    END IF
    IF MOUSE.B > 0 THEN
        MOUSEDRV 2
        IF MOUSE.B = 1 THEN
            IF Y = 0 THEN
                X = INT(MOUSE.X / 8)
                SELECT CASE X
                CASE IS < 3
                    IF S > -1 AND F > -1 THEN
                        RESETWAY
                        RESETMAS
                        ROUTE S, F
                        DRAWWAY
                    END IF
                CASE IS < 4
                CASE IS < 9
                    M = 0
                CASE IS < 10
                CASE IS < 14
                    REDIM SHARED A(1, MASX - 1, MASY - 1)
                    REDIM B(0) AS INTEGER
                    S = -1
                    F = -1
                    CREATEMAP 30
                    DRAWMAP S, F
                CASE IS < 15
                CASE IS < 20
                    REDIM SHARED A(1, MASX - 1, MASY - 1)
                    REDIM B(0) AS INTEGER
                    S = -1
                    F = -1
                    DRAWMAP S, F
                CASE IS < 21
                CASE IS < 26
                    M = 1
                CASE IS < 27
                CASE IS < 33
                    M = 2
                CASE IS < 34
                CASE IS < 38
                    HELP
                    DRAWMAP S, F
                    DRAWWAY
                CASE IS > 75
                    EXIT DO
                END SELECT
            ELSE
                SELECT CASE M
                CASE 0
                    A(0, X, Y - 1) = 2
                    LINE (X * 16 + 1, Y * 16 + 1)-(X * 16 + 15, Y * 16 + 15), 7, BF
                CASE 1
                    IF A(0, X, Y - 1) < 2 THEN
                        LINE (GETX(S) * 16 + 1, GETY(S) * 16 + 17)-(GETX(S) * 16 + 15, GETY(S) * 16 + 31), 0, BF
                        S = (Y - 1) * MASX + X
                        CIRCLE (X * 16 + 8, Y * 16 + 8), 5, 14
                        PAINT (X * 16 + 8, Y * 16 + 8), 14
                        B(0) = S
                    END IF
                CASE 2
                    IF A(0, X, Y - 1) < 2 THEN
                        LINE (GETX(F) * 16 + 1, GETY(F) * 16 + 17)-(GETX(F) * 16 + 15, GETY(F) * 16 + 31), 0, BF
                        F = (Y - 1) * MASX + X
                        CIRCLE (X * 16 + 8, Y * 16 + 8), 5, 10
                        PAINT (X * 16 + 8, Y * 16 + 8), 10
                        B(UBOUND(B)) = F
                    END IF
                END SELECT
            END IF
        ELSEIF MOUSE.B = 2 THEN
            IF Y > 0 THEN
                A(0, X, Y - 1) = 0
                LINE (X * 16 + 1, Y * 16 + 1)-(X * 16 + 15, Y * 16 + 15), 0, BF
            END IF
        END IF
        MOUSEDRV 1
    END IF
LOOP
CLS
SYSTEM
 
SUB CREATEMAP (P AS INTEGER)
    DIM N AS INTEGER, X AS INTEGER, Y AS INTEGER, C AS INTEGER
    N = INT((MASX * MASY) * (P / 100))
    DO WHILE N > 0
       X = INT(RND * (MASX))
       Y = INT(RND * (MASY))
       IF A(0, X, Y) = 0 THEN
            A(0, X, Y) = 2
            N = N - 1
       END IF
    LOOP
END SUB
 
SUB DRAWMAP (S AS INTEGER, F AS INTEGER)
    FOR Y = 0 TO MASY - 1
        FOR X = 0 TO MASX - 1
            IF A(0, X, Y) = 2 THEN
                LINE (X * 16 + 1, Y * 16 + 17)-(X * 16 + 15, Y * 16 + 31), 7, BF
            ELSE
                LINE (X * 16 + 1, Y * 16 + 17)-(X * 16 + 15, Y * 16 + 31), 0, BF
            END IF
        NEXT X
    NEXT Y
END SUB
 
SUB DRAWWAY
    DIM I AS INTEGER
    IF UBOUND(B) > 0 THEN
        FOR I = 1 TO UBOUND(B)
            X = GETX(B(I))
            Y = GETY(B(I))
            X1 = GETX(B(I - 1))
            Y1 = GETY(B(I - 1))
            LINE (X * 16 + 1, Y * 16 + 17)-(X * 16 + 14, Y * 16 + 30), 0, BF
            LINE (X1 * 16 + 8, Y1 * 16 + 24)-(X * 16 + 8, Y * 16 + 24), 11
            CIRCLE (X * 16 + 8, Y * 16 + 24), 2, 11
            IF I = 1 THEN
                CIRCLE (X1 * 16 + 8, Y1 * 16 + 24), 5, 14
                PAINT (X1 * 16 + 8, Y1 * 16 + 24), 14
            END IF
        NEXT I
        CIRCLE (X * 16 + 8, Y * 16 + 24), 5, 10
        PAINT (X * 16 + 8, Y * 16 + 24), 10
    END IF
    COLOR 15: LOCATE 1, 67: PRINT RIGHT$("000" + LTRIM$(STR$(UBOUND(B))), 4);
END SUB
 
FUNCTION GETX% (CELL AS INTEGER)
    GETX = CELL MOD MASX
END FUNCTION
 
FUNCTION GETY% (CELL AS INTEGER)
    GETY = INT(CELL / MASX)
END FUNCTION
 
SUB GRID
    DIM X AS INTEGER, Y AS INTEGER, C AS INTEGER
    COLOR 12: LOCATE 1, 1: PRINT "RUN"
    COLOR 10: LOCATE 1, 5: PRINT "BLOCK AUTO RESET START FINISH HELP"
    COLOR 12: LOCATE 1, 77: PRINT "EXIT"
    LINE (0, 0 + 16)-(639, 479), 0, BF
    FOR X = 0 TO MASX
        LINE (0, 0 + 16)-(X * 16, MASY * 16 + 16), 8, B
    NEXT X
    FOR Y = 0 TO MASY
        LINE (0, 0 + 16)-(MASX * 16, Y * 16 + 16), 8, B
    NEXT Y
END SUB
 
SUB HELP
    LINE (80, 120)-(560, 375), 9, BF
    LINE (90, 130)-(550, 365), 0, BF
    COLOR 7
    LOCATE 10, 16: PRINT "Нахождение кратчайшего пути по алгоритму Дейкстры"
    LOCATE 12, 16: PRINT "1. Рисуем лабиринт в ручную [BLOCK] или генерируем"
    LOCATE 13, 19: PRINT "автоматически [AUTO]"
    LOCATE 14, 16: PRINT "1.1. Левой кнопкой ставим блоки, правой удаляем."
    LOCATE 15, 16: PRINT "1.2. Очистить поле от всех блоков [RESET]"
    LOCATE 16, 16: PRINT "2. Отмечаем стартовую точку [START]"
    LOCATE 17, 16: PRINT "3. Отмечаем точку назначения [FINISH]"
    LOCATE 18, 16: PRINT "4. Для начала расчета нажимаем [RUN]"
    LOCATE 19, 16: PRINT "5. Для получения справки нажмите [HELP]"
    LOCATE 20, 16: PRINT "6. Для выхода из программы нажмите [EXIT]"
    LOCATE 22, 22: PRINT "Для продолжения нажмите любую клавишу"
    DO WHILE INKEY$ = "": LOOP
    GRID
END SUB
 
SUB LOADMOUSEDRV
    DIM ADR AS INTEGER
    MOUSECODE = STRING$(23, CHR$(0))
    DEF SEG = VARSEG(MOUSECODE)
    ADR = SADD(MOUSECODE)
    POKE ADR, 184
    POKE ADR + 1, 0
    POKE ADR + 2, 0
    POKE ADR + 3, 205
    POKE ADR + 4, 51
    POKE ADR + 5, 137
    POKE ADR + 6, 30
    POKE ADR + 7, 0
    POKE ADR + 8, 0
    POKE ADR + 9, 137
    POKE ADR + 10, 14
    POKE ADR + 11, 0
    POKE ADR + 12, 0
    POKE ADR + 13, 137
    POKE ADR + 14, 22
    POKE ADR + 15, 0
    POKE ADR + 16, 0
    POKE ADR + 17, 203
    DEF SEG
END SUB
 
SUB MOUSEDRV (Func AS INTEGER)
    'Func = 1 - Показать курсор мыши
    'Func = 2 - Скрыть курсор мыши
    'Func = 3 - Получение позиции и состояния кнопок мыши
    DIM ADR AS INTEGER
    DEF SEG = VARSEG(MOUSECODE)
    ADR = SADD(MOUSECODE)
    POKE ADR + 1, Func
    POKE ADR + 7, (ADR + 22) MOD 256
    POKE ADR + 8, INT((ADR + 22) / 256)
    POKE ADR + 11, (ADR + 18) MOD 256
    POKE ADR + 12, INT((ADR + 18) / 256)
    POKE ADR + 15, (ADR + 20) MOD 256
    POKE ADR + 16, INT((ADR + 20) / 256)
    CALL ABSOLUTE(ADR)
    IF Func = 3 THEN
        MOUSE.X = PEEK(ADR + 18) + PEEK(ADR + 19) * 256
        MOUSE.Y = PEEK(ADR + 20) + PEEK(ADR + 21) * 256
        MOUSE.B = PEEK(ADR + 22)
    END IF
    DEF SEG
END SUB
 
SUB RESETMAS
    DIM X AS INTEGER, Y AS INTEGER, S AS INTEGER
    S = MASX ^ 2 + MASY ^ 2
    FOR Y = 0 TO MASY - 1
        FOR X = 0 TO MASX - 1
            A(1, X, Y) = S
            IF A(0, X, Y) = 1 THEN
                A(0, X, Y) = 0
            END IF
        NEXT X
    NEXT Y
    REDIM B(0) AS INTEGER
END SUB
 
SUB RESETWAY
    DIM I AS INTEGER
    IF UBOUND(B) > 0 THEN
        FOR I = 0 TO UBOUND(B)
            X = GETX(B(I))
            Y = GETY(B(I))
            LINE (X * 16, Y * 16 + 16)-(X * 16 + 16, Y * 16 + 32), 8, B
            LINE (X * 16 + 1, Y * 16 + 17)-(X * 16 + 15, Y * 16 + 31), 0, BF
            IF I = 0 THEN
                CIRCLE (X * 16 + 8, Y * 16 + 24), 5, 14
                PAINT (X * 16 + 8, Y * 16 + 24), 14
            END IF
        NEXT I
        CIRCLE (X * 16 + 8, Y * 16 + 24), 5, 10
        PAINT (X * 16 + 8, Y * 16 + 24), 10
    END IF
    COLOR 15: LOCATE 1, 67: PRINT "0000";
END SUB
 
SUB ROUTE (S AS INTEGER, F AS INTEGER)
    DIM X AS INTEGER, Y AS INTEGER, X1 AS INTEGER, Y1 AS INTEGER
    DIM I  AS INTEGER, J AS INTEGER, N AS INTEGER, K AS INTEGER, C AS INTEGER
    DIM K1 AS LONG, K2 AS LONG
    REDIM CELLS(MASX * MASY) AS CELL
    A(1, GETX(F), GETY(F)) = 0
    N = 0: J = 0
    CELLS(0).X = GETX(F)
    CELLS(0).Y = GETY(F)
    DO WHILE J <= N
        X = CELLS(J).X
        Y = CELLS(J).Y
        C = Y * MASX + X
        IF S = C THEN EXIT DO
        I = A(1, X, Y) + 1
        A(0, X, Y) = 1
        Y1 = Y - 1
        'Клетка сверху
        IF Y1 > -1 THEN
            IF A(0, X, Y1) = 0 THEN
                IF A(1, X, Y1) > I THEN
                    N = N + 1
                    CELLS(N).X = X
                    CELLS(N).Y = Y1
                    A(1, X, Y1) = I
                END IF
            END IF
        END IF
        'Клетка слева
        X1 = X - 1
        IF X1 > -1 THEN
            IF A(0, X1, Y) = 0 THEN
                IF A(1, X1, Y) > I THEN
                    N = N + 1
                    CELLS(N).X = X1
                    CELLS(N).Y = Y
                    A(1, X1, Y) = I
                END IF
            END IF
        END IF
        'Клетка справа
        X1 = X + 1
        IF X1 < MASX THEN
            IF A(0, X1, Y) = 0 THEN
                IF A(1, X1, Y) > I THEN
                    N = N + 1
                    CELLS(N).X = X1
                    CELLS(N).Y = Y
                    A(1, X1, Y) = I
                END IF
            END IF
        END IF
        'Клетка снизу
        Y1 = Y + 1
        IF Y1 < MASY THEN
            IF A(0, X, Y1) = 0 THEN
                IF A(1, X, Y1) > I THEN
                    N = N + 1
                    CELLS(N).X = X
                    CELLS(N).Y = Y1
                    A(1, X, Y1) = I
                END IF
            END IF
        END IF
        J = J + 1
    LOOP
    'Построение пути
    IF J <= N THEN
        J = A(1, GETX(S), GETY(S))
        REDIM B(J) AS INTEGER
        B(0) = S
        FOR N = 1 TO J
            REDIM CELLS(3) AS CELL
            X = GETX(B(N - 1))
            Y = GETY(B(N - 1))
            Y1 = Y - 1
            CELLS(0).X = -1
            IF Y1 > -1 THEN
                IF A(0, X, Y1) = 1 THEN
                    CELLS(0).X = Y1 * MASX + X
                    CELLS(0).Y = A(1, X, Y1)
                END IF
            END IF
            X1 = X - 1
            CELLS(1).X = -1
            IF X1 > -1 THEN
                IF A(0, X1, Y) = 1 THEN
                    CELLS(1).X = Y * MASX + X1
                    CELLS(1).Y = A(1, X1, Y)
                END IF
            END IF
            X1 = X + 1
            CELLS(2).X = -1
            IF X1 < MASX THEN
                IF A(0, X1, Y) = 1 THEN
                    CELLS(2).X = Y * MASX + X1
                    CELLS(2).Y = A(1, X1, Y)
                END IF
            END IF
            Y1 = Y + 1
            CELLS(3).X = -1
            IF Y1 < MASY THEN
                IF A(0, X, Y1) = 1 THEN
                    CELLS(3).X = Y1 * MASX + X
                    CELLS(3).Y = A(1, X, Y1)
                END IF
            END IF
            K = MASX * MASY
            FOR I = 0 TO 3
                IF CELLS(I).X > -1 THEN
                    IF K > CELLS(I).Y THEN
                        C = CELLS(I).X
                        K = CELLS(I).Y
                    ELSEIF K = CELLS(I).Y THEN
                        'Рандомим для получения вариаций если есть несколько вариантов
                        IF INT(RND * 2) > 0 THEN
                            C = CELLS(I).X
                            K = CELLS(I).Y
                        END IF
                    END IF
                END IF
            NEXT I
            B(N) = C
        NEXT N
    END IF
    SOUND 500, .5
END SUB
Миниатюры
Поиск кратчайшего пути   Поиск кратчайшего пути  
1
1484 / 579 / 106
Регистрация: 26.03.2012
Сообщений: 1,028
11.06.2013, 12:01 20
PS. В QuickBasic загружать с ключем /L, для QBasic работает без ключа
0
11.06.2013, 12:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2013, 12:01
Помогаю со студенческими работами здесь

Поиск кратчайшего пути
Как сделать что бы задача не считала стоимость проезда в обратную сторону ? #include &lt;cstdlib&gt; ...

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

Поиск кратчайшего пути
Задача о коммивояжере. Коммивояжер должен посетить клиентов, находящихся в разных городах....

Поиск кратчайшего пути в графе
unit road2_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,...


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

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