![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Харди |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
Привет! На форуме я нашла решение задачи коммивояжера только методом перебора, а мне необходимо решить ее методом ветвей и границ. Помогите пожалуйста решить. Заранее спасибо.
P.S. Если тема уже рассматривалась, скажите, я поищу еще раз |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Харди
Почитай... Я надеюсь, это тебе поможет... (открывать WinRar-ом) Прикрепленные файлы ![]() |
Харди |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
Вопрос: открыть я открыла, а вот с чтением плоховато. В чем посмотреть лучше?
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Харди
Это обычный DOC файл - Word-ом... |
Харди |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
просто у меня файл вообще без расширения
|
Харди |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
и с кодировкой какая-то фигня
|
Altair |
![]()
Сообщение
#7
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
А вы может пытаетесь почитать рар файл?
![]() Вы разархивировали? Word есть? (или все, что читает DOC) -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Харди |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
Rar'ом открыла, в папке лежит файл 97 Kb без расширения. Попробовала Word, Блокнот, редактор Far, IE
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Харди
Цитата папке лежит файл 97 Kb без расширения Я только что скачал отсюда - после WinRar-а в папке DOC на 967 К |
Altair |
![]()
Сообщение
#10
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
А ясно, вольво там два раза зархивил, то что без расщирения это еще один архив рар!
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Харди |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
может у меня версия старая 3.11
|
Харди |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
да вот это сложности! Спасибо я уже открыла!
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Oleg_Z
Харди ![]() |
Altair |
![]()
Сообщение
#14
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Может это форум архивирует второй раз при закачке рара? что-то припоминаю схожую ситуацию, надо проверить будет..
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Харди |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
Спасибо, volvo, за файл, только я его уже изучала.
В программе я сделала приведение самой матрицы, а вот с нахождением весов нулей и последующим вычеркиванием соотвествующих стролбца и строки уже сложнее Я тут нашла один пример: все работает, но ответ не сходится, выдается на 25 больше Код const k=52; var n,e,s,z,min,x,y,d,t:integer; a1,f,i,r,h,c1:array[1..k,1..k] of integer; v:array[1..2,1..k] of integer; p:array[1..k] of integer; a,c:array[1..k,1..k] of integer; begin {$I-} repeat write('Вв.число городов-'); readln(n); until (IOresult=0)and(n>0)and(n<26); writeln('Вв.матрицу расстояний'); for x:=1 to n do for y:=1 to n do begin repeat read(a1[x,y]); if (a1[x,y]<0)or(IOresult<>0) then begin writeln('Ошибка ввода!Продолжайте с эл-та[',x,',',y,']');end; until (a1[x,y]>=0)and(IOresult=0); end; for x:=1 to n do for y:=1 to n do a[x+1,y+n+1]:=a1[x,y]; for x:=1 to 2*n+2 do begin writeln; for y:=1 to 2*n+2 do end; for x:=2 to n+1 do c[1,x]:=1; for x:=1 to n do for y:=1 to n do if a1[x,y]>0 then c[x+1,y+n+1]:=1; for x:=n+2 to 2*n+1 do c[x,2*n+2]:=1; {$I+} for x:=1 to 2*n+2 do for y:=1 to 2*n+2 do begin f[x,y]:=0;r[x,y]:=0;i[x,y]:=0;end; for x:=1 to 2*n+2 do for y:=1 to 2*n+2 do if c[x,y]=0 then h[x,y]:=1; for x:=1 to 2*n+2 do for y:=1 to 2*n+2 do begin if f[x,y]<c[x,y] then i[x,y]:=c[x,y]; if f[x,y]>0then r[x,y]:=c[x,y]end; repeat min:=32767; v[1,1]:=1; for t:=1 to 2*n+2 do begin if v[1,x]=1 then h[x,y]:=1; for x:=1 to 2*n+2 do begin if v[1,x]=1 then h[x,y]:=1; for z:=1 to 2*n+2 do for x:=1 to 2*n+2 do for y:=1 to 2*n+2 do if h[x,y]=0 then begin if (i[x,y]>0)and(v[1,x]<>0)and(v[1,y]=0) then begin v[1,y]:=1;v[2,y]:=x;end; if (r[x,y]>0)and(v[1,y]<>0)and(v[1,x]=0) then begin v[1,x]:=-1;v[2,x]:=y;end; end; y:=2*n+2; x:=v[2,2*n+2]; while x<>0 do begin if (i[x,y]>0)and(i[x,y]<min)and(v[1,y]=1) then min:=i[x,y]; if (r[y,x]>0)and(r[y,x]<min)and(v[1,y]=-1) then min:=r[y,x]; y:=x; x:=v[2,y]; end; y:=2*n+2; x:=v[2,2*n+2]; while x<>0 do begin if (v[1,y]=1) then begin i[x,y]:=i[x,y]-min;r[x,y]:=r[x,y]+min;f[x,y]:=f[x,y]+min; end; if (v[1,y]=-1) then begin i[y,x]:=i[y,x]+min;r[y,x]:=r[y,x]-min;f[y,x]:=f[y,x]-min; end; y:=x; x:=v[2,y]; end; for x:=1 to 2*n+2 do begin v[1,x]:=0;v[2,x]:=0; if v[1,x]=1 then h[x,y]:=1; end; end; end; until min=32767; for x:=1 to 2*n+2 do d:=d+f[1,x]; {-------------------------------------------} for x:=1 to 2*n+2 do for y:=1 to 2*n+2 do begin f[x,y]:=0;r[x,y]:=0;i[x,y]:=0;end; {$I-} s:=d; d:=0; repeat for x:=1 to 2*n+2 do for y:=1 to 2*n+2 do begin if (f[x,y]<c[x,y])and(p[y]-p[x]=a[x,y]) then i[x,y]:=c[x,y]; if (f[x,y]>0)and(p[y]-p[x]=a[x,y]) then r[x,y]:=c[x,y]end; min:=32767; v[1,1]:=1; for z:=1 to 2*n+2 do for x:=1 to 2*n+2 do for y:=1 to 2*n+2 do if h[x,y]=0 then begin if (i[x,y]>0)and(v[1,x]<>0)and(v[1,y]=0) then begin v[1,y]:=1;v[2,y]:=x;end; if (r[x,y]>0)and(v[1,y]<>0)and(v[1,x]=0) then begin v[1,x]:=-1;v[2,x]:=y;end; end; y:=2*n+2; x:=v[2,2*n+2]; while x<>0 do begin if (i[x,y]>0)and(i[x,y]<min)and(v[1,y]=1) then min:=i[x,y]; if (r[y,x]>0)and(r[y,x]<min)and(v[1,y]=-1) then min:=r[y,x]; y:=x; x:=v[2,y];d:=1; end; if (d=1)and(min<s) then e:=1; if (d=1)and(min>=s)then e:=-1; if e=1 then begin s:=s-min;for x:=1 to 2*n+2 do p[x]:=0;end; if e=-1 then begin min:=s;s:=0;for x:=1 to 2*n+2 do p[x]:=0;end; d:=0;e:=0; y:=2*n+2; x:=v[2,2*n+2]; while x<>0 do begin if v[1,y]=1 then begin i[x,y]:=i[x,y]-min;r[x,y]:=r[x,y]+min;end; if v[1,y]=-1 then begin i[y,x]:=i[y,x]+min;r[y,x]:=r[y,x]-min;end; f[x,y]:=r[x,y]; y:=x; x:=v[2,y]; end; for x:=1 to 2*n+2 do if v[1,x]=0 then p[x]:=p[x]+1; for x:=1 to 2*n+2 do begin v[1,x]:=0;v[2,x]:=0;end; until s=0; write('Матрица расстояний:'); for x:=1 to 2*n+2 do begin writeln; for y:=1 to 2*n+2 do begin s:=s+a[x,y]*f[x,y]; write(f[x,y]:3); end;end; writeln; write('длина пути-',s); readln;readln; end. |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Харди
![]() |
Харди |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Репутация: ![]() ![]() ![]() |
наверное, на симплекс-метод, например, намного меньше.
коммивояжер даже в ручном методе очень много вычислений посмотреть бы пример программы, может стало бы понятнее |
Гость_Харди |
![]()
Сообщение
#18
|
Гость ![]() |
Кто-нибудь может мне помочь с этой задачей? Ручной метод есть, а вот с программной реализацией полный аут
|
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Харди
Держите работающую программу метода ветвей и границ (она требует входной файл, я прикреплю его следующим сообщением) Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Формат входного файла:
Цитата <число вершин> <вес ребра из вершины 1 в вершину 1> <вес ребра из 1 из 2> ... <вес ребра из 1 в n> <вес ребра из 2 в 1> <вес ребра из 2 из 2> ... <вес ребра из 2 в n> ... <вес ребра из n в 1> <вес ребра из n из 2> ... <вес ребра из n в n> А вот пример файла с данными для программы... ![]() Сообщение отредактировано: volvo - |
![]() ![]() |
![]() |
Текстовая версия | 8.04.2025 18:21 |