Помогите муравью определить самый экономичный путь - QBasic
Формулировка задачи:
Дано квадратное поле размером 10*10. Этому полю соответствует
матрица А(). Матрица задана рандомно. Элементы матрицы указывают высоту этого элемента относительно некоторого нулевого уровня.
Из левого верхнего угла вышел муравей. Он хочет пройти в правый нижний угол так, чтобы потратить минимум сил. Если муравей идет по ровной дороге, то он сил не тратит. Но если ему приходится взбираться или спускаться на N единиц вверх или вниз, то он тратит N единиц энергии.
Помогите муравью определить самый экономичный путь.
Эта программа решает данную задачу
На экран выводится исходная матрица и матрица, каждый элемент которой есть сумма модулей разности высот начиная от начального положения муравья. Также указан красным цветом оптимальный путь.
Листинг программы
- CLS
- RANDOMIZE TIMER
- DIM A(11, 11) AS INTEGER
- DIM B(11, 11) AS INTEGER
- FOR i = 1 TO 10
- FOR j = 1 TO 10
- A(0, j) = 500
- A(11, j) = 500
- A(i, 0) = 500
- A(i, 11) = 500
- B(0, j) = 500
- B(i, 0) = 500
- B(i, 11) = 500
- B(11, j) = 500
- NEXT j, i
- FOR i = 1 TO 10
- FOR j = 1 TO 10
- A(i, j) = 19 * RND
- NEXT j, i
- FOR i = 1 TO 10
- FOR j = 1 TO 10
- LOCATE i, 3 * j
- PRINT USING "###"; A(i, j)
- NEXT j, i
- FOR i = 1 TO 10
- FOR j = 1 TO 10
- IF i + j > 2 THEN
- IF ABS(A(i - 1, j) - A(i, j)) > ABS(A(i, j - 1) - A(i, j)) THEN
- B(i, j) = B(i, j - 1) + ABS(A(i, j - 1) - A(i, j))
- ELSE
- B(i, j) = B(i - 1, j) + ABS(A(i - 1, j) - A(i, j))
- END IF
- END IF
- NEXT j, i
- COLOR 15
- FOR i = 1 TO 10
- FOR j = 1 TO 10
- LOCATE i, 35 + 4 * j
- PRINT USING "###"; B(i, j)
- NEXT j
- NEXT i
- i = 1
- j = 1
- COLOR 12
- LOCATE 1, 39
- PRINT USING "###"; B(1, 1)
- DO
- IF B(i, j + 1) < B(i + 1, j) THEN
- COLOR 12
- LOCATE i, 35 + 4 * (j + 1)
- PRINT USING "###"; B(i, j + 1)
- j = j + 1
- COLOR 15
- ELSE
- COLOR 12
- LOCATE i + 1, 35 + 4 * j
- PRINT USING "###"; B(i + 1, j)
- i = i + 1
- COLOR 15
- END IF
- LOOP UNTIL i = 10 AND j = 10
- END
Решение задачи: «Помогите муравью определить самый экономичный путь»
textual
Листинг программы
- IF ABS(A(i - 1, j) - A(i, j)) > ABS(A(i, j - 1) - A(i, j)) THEN
Объяснение кода листинга программы
- Проверяется условие ABS(A(i - 1, j) - A(i, j)) > ABS(A(i, j - 1) - A(i, j))
- Если условие выполняется, то выполняется блок кода, который следует за оператором THEN
- В данном случае, в блоке кода нет никаких действий, поэтому этот пункт не применим
- Код продолжается выполняться, пока не будет выполнено условие или пока не будет достигнут конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д