![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
xlr8 |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте!
Будьте добры, помогите решить такой вопрос: Значит в разделе FAQ на сайте размещен текст программы для решения задачи коммивояжера методом простого перебора. Программу я запускал - на текстовом примере размерностью матрицы 10*10 всё работает отлично. На меньших размерностях вопросов тоже не возникает. Но как только потребовалось решить матрицу 20*20 (30*30) программа зацикливается. Текст программы находиться здесь, я в неё не вносил никаких изменений. FAQ. Раздел Метод перебора. Посоветуйте, пожалуйста, какие изменения нужно внести в данную программу для того, чтобы разрешить проблему размерности? Заранее благодарен за советы |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Можешь прикрепить текстовый файл с матрицей, при обработке которой у тебя зависает программа?
|
xlr8 |
![]() ![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Репутация: ![]() ![]() ![]() |
Можешь прикрепить текстовый файл с матрицей, при обработке которой у тебя зависает программа? конечно Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Вот сразу же тебе и ошибка: нули убирай с диагонали матрицы, либо читай их тоже из файла, и только потом в элемент A[i, j] заноси MaxInt... Обрати внимание, в FAQ-е в файле данных нет нулей на главной диагонали, потому что там данные читаются вот так:
for i:=1 to n do. |
xlr8 |
![]() ![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Репутация: ![]() ![]() ![]() |
Так ведь нули я пробовал удалить - результата это всё равно не дало.
И, кстати, из программы эту строчку я исправил чтобы из файла нолики читало. Сообщение отредактировано: xlr8 - |
xlr8 |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Репутация: ![]() ![]() ![]() |
![]() up |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Хм... Очень интересно. Вариант Гари Дарби для решения методом ветвей и границ на приведенной матрице выдает:
Running "f:\programs\pascal\__komm.exe" Это правильный вариант? Потому что на примере из нашего FAQ-а задача им же решается неправильно: Running "f:\programs\pascal\__komm.exe" , в то время как программа virt-а выдает ответ = 158... Попробую еще прогнать пару других программ, посмотрим, что они выдадут... |
xlr8 |
![]() ![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Так... Программа работает, но ОЧЕНЬ долго. Учти, что при решении несимметричной задачи коммивояжера для N узлов (методом полного перебора) потребуется (n-1)! проходов. В твоем случае n = 20, значит число проходов будет равно 121645100408832000 (для матрица 10*10 из примера: 9! = 362880 проходов. Чувствуешь разницу?)
Так что решай задачу другим методом. Результата полного перебора на таких размерностях дождаться затруднительно. |
xlr8 |
![]() ![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 22 Пол: Мужской Репутация: ![]() ![]() ![]() |
Учти, что при решении несимметричной задачи коммивояжера для N узлов (методом полного перебора) потребуется (n-1)! проходов. Переход - в смысле "итерация"? Чувствуешь разницу?) Да уж..Получается такой себе Brutal Force)..для мэйнфрейма. Результата полного перебора на таких размерностях дождаться затруднительно. Понятно..Я думал что это в программе ошибка какая-то, что она зацикливается, час ждал 20*20 - а она всё работает и работает. Спасибо Вам большое за помощь, затраченное время и качественный ответ. Сообщение отредактировано: xlr8 - |
![]() ![]() |
![]() |
Текстовая версия | 9.09.2025 7:48 |