Программирование
ОЧЕНЬ-ОЧЕНЬ-ОЧЕНЬ нужна о помощь в кратчайшие сроки в решение следующих задач. За помощь(и решение) ОГРОМНОЕ человеческое спасибо и благодарность. Помогите фанату Героев.
1.
На СИ++(Visual) или Delphi или Prolog
Нужно решить. Задача о коммивояжере( надо найти минимальный путь между первым и последним городом всего задано 10 городов).
Очень прошу если могут сделать в исходниках.
2.
И ещё одна на Turbo Prolog
найти вершины графа,достижимые из заданного.
Обращаюсь ко всем программистам данного форума помогите пожалуйста.
1.
На СИ++(Visual) или Delphi или Prolog
Нужно решить. Задача о коммивояжере( надо найти минимальный путь между первым и последним городом всего задано 10 городов).
Очень прошу если могут сделать в исходниках.
2.
И ещё одна на Turbo Prolog
найти вершины графа,достижимые из заданного.
Обращаюсь ко всем программистам данного форума помогите пожалуйста.
-
-
Почетный член КС — Honored Member- Сообщения: 6063
- Зарегистрирован: 22 дек 2002, 13:40
- Откуда: Петрозаводск
- Контактная информация:
Есть что-то похожее (даже очень). Разбирайся сам:Rodrigy писал(а):ОЧЕНЬ-ОЧЕНЬ-ОЧЕНЬ нужна о помощь в кратчайшие сроки в решение следующих задач.
1. БП7. Метод ветвей и границ:
Код: Выделить всё
{$M 65520,0,655360}
const dim=50; big=10000000; intbig=1000;
var
iter,x1,y1,x2,y2,etuk,etalon,uk,num,sum,gmin,gmax,i,j,k,m,n:longint;
a,b:array[1..dim,1..dim] of longint;
c,d,u,v:array[1..dim] of integer; {с- м-ца смежности}
etst,etfi,st,fi:array[1..dim] of integer;
function obhod:longint;
var p,t,i,j,k,m,min,max:longint; minr,minc:array[1..dim] of longint;
x,y,gx,gy:integer;
label ex;
begin
inc(iter);
{Приведение матрицы}
k:=0;
for i:=1 to n do
if u[i]=0 then
begin
minr[i]:=intbig;
for j:=1 to n do if (a[i,j]<minr[i]) and (v[j]=0) then minr[i]:=a[i,j];
for j:=1 to n do if (a[i,j]<>big) and (v[j]=0) then dec(a[i,j],minr[i]);
inc(k,minr[i]);
end;
for j:=1 to n do
if v[j]=0 then
begin
minc[j]:=intbig;
for i:=1 to n do if (a[i,j]<minc[j]) and (u[i]=0) then minc[j]:=a[i,j];
for i:=1 to n do if (a[i,j]<>big) and (u[i]=0) then dec(a[i,j],minc[j]);
inc(k,minc[j]);
end;
inc(sum,k); t:=sum;
{writeln(iter,'-ая глубина ',sum);}
if sum>=etalon then goto ex;
if num=2 then
begin
y1:=0; y2:=0;
for i:=1 to n do
if (u[i]=0) then begin y1:=i; break; end;
if y1=0 then goto ex;
if y1<>n then
for i:=i+1 to n do
if (u[i]=0) then begin y2:=i; break; end;
x1:=0; x2:=0;
for j:=1 to n do
if (v[j]=0) then begin x1:=j; break; end;
if x1=0 then goto ex;
if x1<>n then
for j:=j+1 to n do
if (v[j]=0) then begin x2:=j; break; end;
if (a[y1,x1]<>big) and (a[y2,x2]<>big) then
begin
inc(uk); st[uk]:=y1; fi[uk]:=x1; inc(t,a[y1,x1]);
inc(uk); st[uk]:=y2; fi[uk]:=x2; inc(t,a[y2,x2]);
end
else
if (a[y1,x2]<>big) and (a[y2,x1]<>big) then
begin
inc(uk); st[uk]:=y1; fi[uk]:=x2; inc(t,a[y1,x2]);
inc(uk); st[uk]:=y2; fi[uk]:=x1; inc(t,a[y2,x1]);
end
else goto ex;
if etalon>t then
begin
for i:=1 to uk do begin etst[i]:=st[i]; etfi[i]:=fi[i]; end;
etalon:=t;
etuk:=uk;
dec(uk,2);
end;
goto ex;
end;
{Подсчет рангов у нулей}
for i:=1 to n do for j:=1 to n do b[i,j]:=0;
for i:=1 to n do
for j:=1 to n do
if (a[i,j]=0) and (u[i]=0) and (v[j]=0) then
begin
min:=big;
for p:=1 to n do
if (a[i,p]<min) and (u[i]=0) and (v[p]=0) and (j<>p) then min:=a[i,p];
if min<big then inc(b[i,j],min);
min:=big;
for p:=1 to n do
if (a[p,j]<min) and (u[p]=0) and (v[j]=0) and (i<>p) then min:=a[p,j];
if min<big then inc(b[i,j],min);
end;
{Поиск нуля с макс. рангом}
max:=-1;
for i:=1 to n do
for j:=1 to n do
if (a[i,j]=0) and (u[i]=0) and (v[j]=0) and (b[i,j]>max) then
begin
y:=i; x:=j; max:=b[i,j];
end;
{1 альтернатива - идем по ребру (y,x)}
c[y]:=x;
d[x]:=y;
gy:=x;
while (c[gy]<>0) do gy:=c[gy];
gx:=y;
while (d[gx]<>0) do gx:=d[gx];
p:=a[gy,gx];
a[gy,gx]:=big;
u[y]:=1;
v[x]:=1;
inc(uk); st[uk]:=y; fi[uk]:=x;
{ writeln(y,' ',x);}
dec(num);
t:=obhod;
c[y]:=0;
d[x]:=0;
inc(num);
v[x]:=0;
u[y]:=0;
a[gy,gx]:=p;
dec(uk);
{-----------------------------------------------------------------}
p:=a[y,x];
a[y,x]:=big;
m:=obhod;
a[y,x]:=p;
if m<t then t:=m;
ex:
for i:=1 to n do
for j:=1 to n do
if (u[i]=0) and (v[j]=0) and (a[i,j]<>big) then inc(a[i,j],minr[i]+minc[j]);
dec(sum,k);
obhod:=t;
{ dec(iter);}
end;
begin
assign(input,'inp.txt');
reset(input);
assign(output,'output.txt');
rewrite(output);
read(n);
for i:=1 to n do
begin
for j:=1 to n do
read(a[i,j]);
a[i,i]:=big;
end;
num:=n;
iter:=0;
etalon:=big;
k:=obhod;
writeln(k,' ',etalon);
for i:=1 to etuk do writeln(etst[i],' ',etfi[i],' ** ',a[etst[i],etfi[i]]);
end.
Код: Выделить всё
Domains
int=integer*
str=symbol*
Predicates
road(symbol,symbol,integer)
road1(symbol,symbol,integer)
add(symbol,str,str)
conc(str,str,str)
reverse(str,str)
reverse1(str,str,str)
member(symbol,str)
way(symbol,symbol,str,str,integer)
go(symbol,symbol)
went(symbol,symbol,symbol)
Clauses
road(tampa,houston,200).
road(gordon,tampa,300).
road(houston,gordon,100).
road(houston,kansas_city,120).
road(gordon,kanzas_city,130).
road(sedoma,tampa,500).
road1(X,Y,T):-road(X,Y,T);road(Y,X,T).
add(X,L,[X|L]).
conc([],L,L).
conc([X|L1],L2,[X|L3]):-conc(L1,L2,L3).
reverse(L1,L2):-reverse1(L1,[],L2).
reverse1([],L,L).
reverse1([H|T],L1,L2):-reverse1(T,[H|L1],L2).
member(X,[X|_]).
member(X,[_|T]):-member(X,T).
way(X,Y,W,W,R):-road1(X,Y,R).
way(X,Y,W,L,Q):-road1(X,Z,A),not(member(Z,W)),way(Z,Y,[Z|W],L,T),Q=A+T.
go(H,T):-way(H,T,[H],W,Q),add(T,W,W1),reverse(W1,W2),write(W2),nl,write(Q),nl.
went(H,T,P):-way(H,T,[H],W,_),reverse(W,W1),way(T,P,[T],W2,_),add(P,W2,W3),
reverse(W3,W4),conc(W1,W4,W5),write(W5),nl.
CMEPTb, Little Angel of Death
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана
-
Champion- Сообщения: 151
- Зарегистрирован: 16 окт 2004, 21:10
ха а зачем использовать метод ветвей и границ?
для 10 городов ПП рулит
для 10 городов ПП рулит
Это был хаос и удача. И тот, кто думает иначе, - глупец...(с) Max Payne
- Solaris
Archangel- Сообщения: 449
- Зарегистрирован: 7 фев 2003, 17:36
- Откуда: Самара
- Контактная информация:
Раз уж такие дела, то напишу лабу прошлого семестра по Системам Искусственного Интеллекта./*****************************************************************************
Copyright (c) My Company
Project: LW3
FileName: LW3.PRO
Purpose: No description
Written by: Visual Prolog
Comments: Задача коммивояжера
******************************************************************************/
domains
list=symbol*
facts
dlist(list)
dcity(list,word)
predicates
edge(symbol,symbol,word)
path(symbol)
path(symbol,symbol,word,list,list)
member(symbol,list)
create
counter(list,byte)
search(list,symbol)
sr_next(list,list)
wrpat(list)
clauses
dlist([]).
dcity([],65535).
edge(a,a,0).
edge(a,b,10).
edge(a,c,40).
edge(a,d,50).
edge(a,e,51).
edge(a,f,52).
edge(a,g,53).
edge(a,h,54).
edge(a,i,55).
edge(a,j,56).
edge(a,k,57).
edge(a,l,58).
edge(a,m,59).
edge(a,n,69).
edge(b,a,15).
edge(b,c,30).
edge(b,d,46).
edge(b,e,47).
edge(b,f,48).
edge(b,g,49).
edge(b,h,56).
edge(b,i,55).
edge(b,j,54).
edge(b,k,36).
edge(b,l,26).
edge(b,m,16).
edge(b,n,96).
edge(c,a,20).
edge(c,b,25).
edge(c,d,80).
edge(c,e,90).
edge(c,f,76).
edge(c,g,546).
edge(c,h,850).
edge(c,i,860).
edge(c,j,830).
edge(c,k,870).
edge(c,l,820).
edge(c,m,810).
edge(c,n,880).
edge(d,a,60).
edge(d,b,44).
edge(d,c,70).
edge(d,e,110).
edge(d,f,710).
edge(d,g,170).
edge(d,h,701).
edge(d,i,320).
edge(d,j,350).
edge(d,k,540).
edge(d,l,570).
edge(d,m,740).
edge(d,n,730).
edge(e,a,44).
edge(e,b,44).
edge(e,c,70).
edge(e,d,110).
edge(e,f,710).
edge(e,g,170).
edge(e,h,701).
edge(e,i,320).
edge(e,j,350).
edge(e,k,540).
edge(e,l,570).
edge(e,m,740).
edge(e,n,730).
edge(f,a,44).
edge(f,b,44).
edge(f,c,70).
edge(f,d,110).
edge(f,e,710).
edge(f,g,170).
edge(f,h,701).
edge(f,i,320).
edge(f,j,350).
edge(f,k,540).
edge(f,l,570).
edge(f,m,740).
edge(f,n,730).
edge(g,a,44).
edge(g,b,44).
edge(g,c,70).
edge(g,d,110).
edge(g,f,710).
edge(g,e,170).
edge(g,h,701).
edge(g,i,320).
edge(g,j,350).
edge(g,k,540).
edge(g,l,570).
edge(g,m,740).
edge(g,n,730).
edge(h,a,44).
edge(h,b,44).
edge(h,c,70).
edge(h,d,110).
edge(h,f,710).
edge(h,g,170).
edge(h,e,701).
edge(h,i,320).
edge(h,j,350).
edge(h,k,540).
edge(h,l,570).
edge(h,m,740).
edge(h,n,730).
/* edge(i,a,44).
edge(i,b,44).
edge(i,c,70).
edge(i,d,110).
edge(i,f,710).
edge(i,g,170).
edge(i,h,701).
edge(i,e,320).
edge(i,j,350).
edge(i,k,540).
edge(i,l,570).
edge(i,m,740).
edge(i,n,730).
edge(j,a,44).
edge(j,b,44).
edge(j,c,70).
edge(j,d,110).
edge(j,f,710).
edge(j,g,170).
edge(j,h,701).
edge(j,i,320).
edge(j,e,350).
edge(j,k,540).
edge(j,l,570).
edge(j,m,740).
edge(j,n,730).
edge(k,a,44).
edge(k,b,44).
edge(k,c,70).
edge(k,d,110).
edge(k,f,710).
edge(k,g,170).
edge(k,h,701).
edge(k,i,320).
edge(k,j,350).
edge(k,e,540).
edge(k,l,570).
edge(k,m,740).
edge(k,n,730).
edge(l,a,44).
edge(l,b,44).
edge(l,c,70).
edge(l,d,110).
edge(l,f,710).
edge(l,g,170).
edge(l,h,701).
edge(l,i,320).
edge(l,j,350).
edge(l,k,540).
edge(l,e,570).
edge(l,m,740).
edge(l,n,730).
edge(m,a,44).
edge(m,b,44).
edge(m,c,70).
edge(m,d,110).
edge(m,f,710).
edge(m,g,170).
edge(m,h,701).
edge(m,i,320).
edge(m,j,350).
edge(m,k,540).
edge(m,l,570).
edge(m,e,740).
edge(m,n,730).
edge(n,a,44).
edge(n,b,44).
edge(n,c,70).
edge(n,d,110).
edge(n,f,710).
edge(n,g,170).
edge(n,h,701).
edge(n,i,320).
edge(n,j,350).
edge(n,k,540).
edge(n,l,570).
edge(n,m,740).
edge(n,e,730).*/
member(H,[H|_]).
member(H,[_|T]):-member(H,T).
counter([],0).
counter([_|T],X):-counter(T,X0),X=X0+1.
search([]," ").
search([H|T],X):-H=X,!;search(T,X).
sr_next(_,[]).
sr_next(L,[X|T]):-search(L,X),X<>" ",sr_next(L,T).
wrpat([]).
wrpat([H|T]):-wrpat(T),write(H,"->").
/*список всех вершин*/
create:-edge(X,_,_),dlist(L1),not(member(X,L1)),L=[X|L1],retract(dlist(L1)),
assert(dlist(L)).
path(X):-create;path(X,X,Z,[X],L),counter(L,C),dlist(LN),counter(LN,CN),C=CN+1,
sr_next(L,LN),dcity(LR,ZR),Z<ZR,retract(dcity(LR,ZR)),assert(dcity(L,Z)),nl,
write("Стоимость всего пути: ",Z),nl,wrpat(L),write("ПУТЬ"),nl.
path(X,Y,Z,L,[Y|L]):-edge(X,Y,Z).
path(X,Y,Z,L,L2):-edge(X,N,Z1),not(member(N,L)),L1=[N|L],path(N,Y,Z2,L1,L2),Z=Z1+Z2.
goal
Исходный_город=a,path(Исходный_город).
А прикольно две рожи сконвертились
“Лучший совет, который можно дать юношеству: научитесь делать что-нибудь хорошо, а потом найдите того, кто будет платить вам за это деньги”
-
-
Почетный член КС — Honored Member- Сообщения: 6063
- Зарегистрирован: 22 дек 2002, 13:40
- Откуда: Петрозаводск
- Контактная информация:
Где?jabbar писал(а):А прикольно две рожи сконвертились
CMEPTb, Little Angel of Death
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана
Во первых маленько изменю условие по задачам
1. На СИ++(Visual) или Delphi или Turbo Prolog
Нужно решить. Задача о коммивояжере решить надо с использованием генетического алгоритма( надо найти минимальный путь между первым и последним городом, всего задаётся 10 городов).
2. Turbo Prolog
найти ВСЕ вершины графа, достижимые из заданного.
Спасибо конечно СМЕРТЬ за ответ только вот никак я не додумаю твою программу по 2 задачке.Вот какие непонятки:
Может кто поскажет как сделать, чтобы вводить 1 вершину( город,символ),а не 3 как тут, и чтобы искали ВСЕ достижимые вершины графа( города).
Также по 2 задачке есть следущие:
Задача: Найти все вершины графа, к которым существует путь заданной длины от выделенной вершины графа.
Только у меня ничего не выводиться,я задаю длину пути цифрой, а вершину буквой и он мне выводит [] и всё, что делать подскажите пожалуйста, в чём моя ошибка.
Solaris
Visual Prolog не подойдёт,мне нужно именно Turbo Prolog
To all
А есть ли тут специалисты по MathCad ? MathCad 2001i никак не могу иправить ошибку суть её и сама программа с результатом можно глянуть тут.
Спасибо всем откликнувшимся, но всё равно не могу решить проблему.
1. На СИ++(Visual) или Delphi или Turbo Prolog
Нужно решить. Задача о коммивояжере решить надо с использованием генетического алгоритма( надо найти минимальный путь между первым и последним городом, всего задаётся 10 городов).
2. Turbo Prolog
найти ВСЕ вершины графа, достижимые из заданного.
Спасибо конечно СМЕРТЬ за ответ только вот никак я не додумаю твою программу по 2 задачке.Вот какие непонятки:
Может кто поскажет как сделать, чтобы вводить 1 вершину( город,символ),а не 3 как тут, и чтобы искали ВСЕ достижимые вершины графа( города).
Также по 2 задачке есть следущие:
Задача: Найти все вершины графа, к которым существует путь заданной длины от выделенной вершины графа.
Код: Выделить всё
domains
i=integer
s=char
list=s*
database arca(s,s,i)
predicates
nondeterm path(s,s,i)
nondeterm path1(list,s,i)
member(s,list)
clauses
arca('a','b',1).arca('b','c',3).arca('c','d',1).arca('b','d',2).arca('a','d',1).
member(X,[X|_]):-!.
member(X,[_|Tail]):- member(X,Tail).
path(V,MP,MC):-path1([V],MP,MC).
path1([X|_],X,0):-!.
path1([X|Path],MP,MC):-MC>0,arca(X,Y,CXY),not(member(Y,[X|Path])),
C=MC-CXY,path1([Y,X|Path],MP,C).
goal
write("\nВведите длину пути: "),readint(MC),
write("\nВведите вершину, от которой вести поиск: "),readchar(V),
findall(MP,path(V,MP,MC), Answ),write(Answ).
Solaris
Visual Prolog не подойдёт,мне нужно именно Turbo Prolog
To all
А есть ли тут специалисты по MathCad ? MathCad 2001i никак не могу иправить ошибку суть её и сама программа с результатом можно глянуть тут.
Спасибо всем откликнувшимся, но всё равно не могу решить проблему.
-
Champion- Сообщения: 151
- Зарегистрирован: 16 окт 2004, 21:10
может и мне поможете с прогой?
задача:
ввод двух десятичных чисел (до 16 байт) с клавиатуры, преобразование в ЧПТ, сложение, преобразование результата в десятиное число и вывод на экран
язык - Tasm под ДОС
задача:
ввод двух десятичных чисел (до 16 байт) с клавиатуры, преобразование в ЧПТ, сложение, преобразование результата в десятиное число и вывод на экран
язык - Tasm под ДОС
Это был хаос и удача. И тот, кто думает иначе, - глупец...(с) Max Payne
-
-
Почетный член КС — Honored Member- Сообщения: 6063
- Зарегистрирован: 22 дек 2002, 13:40
- Откуда: Петрозаводск
- Контактная информация:
Такой фигней уже никто не занимаетсяArtemis K. писал(а):язык - Tasm под ДОС
CMEPTb, Little Angel of Death
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана
"Если ничто другое не помогает, прочтите, наконец, инструкцию." - Аксиома Кана
-
Champion- Сообщения: 151
- Зарегистрирован: 16 окт 2004, 21:10
ну можно вообще-то любой асм под винду, но я знаю только Tasm под Дос))))
если есть такая прога на любом асме выложи тут текст плиз!!!
если есть такая прога на любом асме выложи тут текст плиз!!!
Это был хаос и удача. И тот, кто думает иначе, - глупец...(с) Max Payne
-
Champion- Сообщения: 151
- Зарегистрирован: 16 окт 2004, 21:10
люди хелп!!!
как вызвать из проги на Делфи функции MatLab????
как вызвать из проги на Делфи функции MatLab????
Это был хаос и удача. И тот, кто думает иначе, - глупец...(с) Max Payne
-
Champion- Сообщения: 130
- Зарегистрирован: 17 янв 2004, 20:51
- Откуда: Новосибирск
- Контактная информация:
Подскажите пожалуйста функцию из BorlandC++ вывода системного времени, и еще, чтобы оно разделялось на 3 переменные, т.е.:переменная s(секунды),m(минуты),h(часы).
-
Champion- Сообщения: 130
- Зарегистрирован: 17 янв 2004, 20:51
- Откуда: Новосибирск
- Контактная информация:
Спасибо уже не надо Сам разобрался.