рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Програма обчислює найкоротший шлях між заданими

Програма обчислює найкоротший шлях між заданими - раздел Образование, {$A+,b-,d+,e+,f-,g-,i+,l+,n- ,o-,p-,q-,r-,s+,t-,v+,x+} {$M ...

{$A+,B-,D+,E+,F-,G-,I+,L+,N-

,O-,P-,Q-,R-,S+,T-,V+,X+}

{$M 16384,0,655360}

Program deikstra;{Програма обчислює найкоротший шлях між заданими

Як s та t) вершинами зв'язного графа формує його як

Послідовність номерів вершин (цілі числа). Ця програма є

Програма навчального призначення i не є оптимальною за багатьма

ознаками. Вимоги до графа наступні:

- це має бути не орграф (задано ребра),

- це не мультиграф (декілька ребер одного типу неприпустимі),

- пропуск номерів вершин в нумерації неприпустимий,

- ребра-петлі неприпустимі,

Зв'язність обов'язкова (реакція програми на протилежне не

Перевірена). Програма частково перевіряє придатність введених

Даних до обробки, проводить індексацію вершин, починаючи з

Кінця шляху (індексація це надання ваги вершинам, де вага

означає найменшу довжину шляху від вершини до кінця шляху)

Потім програма торує шлях з початкової вершини, крокуючі

В напрямку зменшення індексів; при наявності однакових

Ндексів (і шляхів) буде обрано перший з переліку.

Для індексації вершин спочатку проведене розбиття множини вершин

На підмножини - яруси за ознакою однакової мінімальної кількості

Кроків ребрами від кінця шляху до вершини. Потім пересуванням по

Ярусах та перебиранням вершин в межах ярусів уточнюються індекси

Вершин. Файл k8.in в першому рядку містить три цілих числа, де

Перше є номер вершини (не більше 100) початку шляху, друге

Відповідно номер вершини кінця шляху і третє - резерв (поки що

Вводиться, але не використовується). Наступні рядки (у невизначеній

Кількості-програма визначить) по три числа в рядку

Завершуються рядком 0 0 0, ознакою кінця вводу. Кожен рядок

містить:

- номер першої вершини ребра,

- номер другої вершини ребра,

Довжину ребра.

Автором алгоритму з індексацією вершин вважають американ-

Cького програміста Дейкстру.

}

Var

s,t,i,j,m,n,x,d,b,k,p,z,y,x1,x2,wp: integer;

R:array [1..120,1..3] of integer;{перша та друга вершини ребра

та довжина ребра}

w,v:array[1..100] of integer; {індекс вершини w та номер ярусу v}

st:array[1..20] of integer; {вершини найкоротшого шляху}

label b1,b2,b3,b4,b5,b6;

Begin

assign(input,'k8.in');

reset(input);

assign(output,'k8.out');

rewrite(output);

readln(s,t,b); {номери вершин початку, кінця шляху та резервне число}

i:=1 ; {початок вводу описів ребер}

b1:{2}begin {це ввід кортежів-ребер графа та довжин ребер}

readln(r[i,1],r[i,2],r[i,3]); {writeln('r',r[i,1],' ',r[i,2],' ',

r[i,3],'i:=',i);}

{2}end; if r[i,1]=0 then goto b2 else{3}begin i:=i+1;goto b1{3}end;

b2: n:=i-1;writeln('нова задача'); writeln('введено ребер n=',n);

{очищення v} for i:=1 to 100 do v[i]:=0;

{пошук максимального номера вершини}

{проставляємо одиниці в v за номерами вершин}

for i:=1 to n do{4}begin v[r[i,1]]:=1;v[r[i,2]]:=1 {4}end;

{визначаємо макс номер вершини-обчислюємо найбільший номер одиниці в v}

for i:=1 to 100 do if (v[100-i]=1) and (v[100-i+1]=0) then d:=100-i;

Writeln(' кількість вершин d=',d); {підраховуємо кількість одиниць в v

і при відсутності між ними нулів знаємо, що немає пропусків номерів вершин}

x:=0;

for i:=1 to d do if v[i]=0 then x:=x+1; {writeln('x=',x);}

if x=0 then writeln(' ') else begin writeln(' є пропуск номерів вершин ');

goto b6 end;

{задаємо початкове завищене значення індексів та ярусів вершин}

P:=0; for i:=1 to n do p:=p+r[i,3]; for i:=1 to d do {5}begin

W[i]:=p; v[i]:=p

{5}end;

{writeln('сума довжин всіх ребер p=',p);}

{задаємо індекс вершини кінця шляху та ярус її} w[t]:=0;m:=0;v[t]:=0;

{ m - поточний ярус}

Дія 1 - шукаємо та мітимо вершини наступного ярусу - для цього перебираємо

Вершини поточного ярусу і для кожної знаходимо суміжні немічені і мітимо

їх наступним ярусом - зараз буде блок з простим визначенням індексів}

for z:=1 to 1 do begin m:=z-1;

For i:=1 to d do begin

If v[i]=m then for j:=1 to n do begin

If(r[j,1]=i) and (v[r[j,2]]>m) then begin

v[r[j,2]]:=m+1;w[r[j,2]]:=r[j,3] end;

If(r[j,2]=i) and (v[r[j,1]]>m) then begin

v[r[j,1]]:=m+1;w[r[j,1]]:=r[j,3] end;

end;

end;

end;

{for i:=1 to d do write(' i=',i,'v=',v[i],'w=',w[i]); writeln(' ');}

{тепер блок з обчисленням індексів шляхом додавання довжини ребра до індексу попередньої вершини}

{шукаємо вершини ярусу m та надаємо їм індекси не обов'язково мінимальні}

for z:=2 to 10 do begin m:=z-1;

For i:=1 to d do begin

If v[i]=m then for j:=1 to n do begin

If(r[j,1]=i) and (v[r[j,2]]>m) then begin

V[r[j,2]]:=m+1; if w[r[j,2]]>w[i]+r[j,3] then

w[r[j,2]]:=w[i]+r[j,3] end;

If(r[j,2]=i) and (v[r[j,1]]>m) then begin

V[r[j,1]]:=m+1; if w[r[j,1]]>w[i]+r[j,3] then

w[r[j,1]]:=w[i]+r[j,3] end;

end;

end;

end;

{for i:=1 to d do write(' ai=',i,{'v=',v[i],}{'w=',w[i]); writeln(' ');}

{тепер блок коригування залежності індексів від порядку переліку, блок}

{без змін номерів ярусів і з протилежним порядком вибору номеру пари}

for z:=2 to 10 do begin m:=z-1;

For i:=d downto 1 do begin

If v[i]=m then for j:=1 to n do begin

If(r[j,1]=i) and (v[r[j,2]]>m) then begin

If w[r[j,2]]>w[i]+r[j,3] then

w[r[j,2]]:=w[i]+r[j,3] end;

If(r[j,2]=i) and (v[r[j,1]]>m) then begin

If w[r[j,1]]>w[i]+r[j,3] then

w[r[j,1]]:=w[i]+r[j,3] end;

end;

end;

end;

{for i:=1 to d do write(' bi=',i,'v=',v[i],'w=',w[i]); writeln(' ');}

{тепер блок коригування індексів в межах одного кожного ярусу}

for z:=2 to 10 do begin m:=z-1;

For i:=1 to d do begin

If v[i]=m then for j:=1 to n do begin

If(r[j,1]=i) and (v[r[j,2]]=m) then begin

If w[r[j,2]]>w[i]+r[j,3] then

w[r[j,2]]:=w[i]+r[j,3] end;

If(r[j,2]=i) and (v[r[j,1]]=m) then begin

If w[r[j,1]]>w[i]+r[j,3] then

w[r[j,1]]:=w[i]+r[j,3] end;

end;

end;

end;

{for i:=1 to d do write(' ci=',i,{'v=',v[i],'w=',w[i]); writeln(' ');}

{тепер блок коригування ще раз в протилежному порядку в межах одного ярусу}

for z:=2 to 10 do begin m:=z-1;

For i:=d downto 1 do begin

If v[i]=m then for j:=i to n do begin

if(r[j,1]=i) and (v[r[j,2]]=m) then begin {writeln('(',r[j,1],',',r[j,2],') ');}

If w[r[j,2]]>w[i]+r[j,3] then

w[r[j,2]]:=w[i]+r[j,3] end;

If(r[j,2]=i) and (v[r[j,1]]=m) then begin

If w[r[j,1]]>w[i]+r[j,3] then

w[r[j,1]]:=w[i]+r[j,3] end;

end;

end;

end;

{for i:=1 to d do write(' di=',i,{'v=',v[i],}{'w=',w[i]); writeln(' ');}

{блок завершального коригування після виправлень}

for z:=2 to 10 do begin m:=z-1;

For i:=d downto 1 do begin

If v[i]=m then for j:=1 to n do begin

If(r[j,1]=i) and (v[r[j,2]]>m) then begin

If w[r[j,2]]>w[i]+r[j,3] then

w[r[j,2]]:=w[i]+r[j,3] end;

If(r[j,2]=i) and (v[r[j,1]]>m) then begin

If w[r[j,1]]>w[i]+r[j,3] then

w[r[j,1]]:=w[i]+r[j,3] end;

end;

end;

end;

{for i:=1 to d do write(' еi=',i,{'v=',v[i],}{'w=',w[i]); writeln(' ');}

{кінець індексації вершин графа}

{далі побудова послідовності вершин найкоротшого шляху}

K:=1;st[k]:=s;wp:=w[s];z:=s;{встановлено

k- поточний порядковий номер вершини в масиві вершин шляху,

Номер початкової вершини шляху занесено у масив st, індекс вершини

занесено у змінну wp}

B3: {перебираємо вершини суміжні з поточною вершиною і шукаємо серед них

вершину з мінімальним індексом}

For j:=1 to n do

If (r[j,1]=st[k]) and (wp>w[r[j,2]]) then begin

z:=r[j,2]; wp:=w[z]

end;

{знайдено мінімальний індекс з використанням перших елементів кортежів}

For j:=1 to n do

If (r[j,2]=st[k]) and (wp>w[r[j,1]]) then begin

z:=r[j,2]; wp:=w[z]

end;

Знайдено остаточний мінімальний індекс і відповідно вершину для чергового

k:=k+1;st[k]:=z; if z=t then goto b4 else goto b3;{далі вивід} writeln('послідовність вершин найкоротшого шляху:'); i:=1;

End.

 

– Конец работы –

Используемые теги: Програма, обчислює, найкоротший, шлях, між, заданими0.101

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Програма обчислює найкоротший шлях між заданими

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

КОНСПЕКТИ УРОКІВ З МУЗИЧНОГО МИСТЕЦТВА ДЛЯ 4 КЛАСІВ НА ДРУГИЙ СЕМЕСТР НАВЧАЛЬНОГО РОКУ. ТЕМА: Між музикою мого народу і музикою інших не має неперехідних меж.
КОНСПЕКТИ УРОКІВ З МУЗИЧНОГО МИСТЕЦТВА ДЛЯ КЛАСІВ...

Основні поняття системи та моделі. Поняття моделі. Співвідношення між моделлю та системою
Людина постійно моделює оскільки моделі спрощують об єкти і явища... Величезні можливості мають комп ютери для розв язування математичних задач Числовими методами для більшості задач...

ПРОГРАМА РОБОТИ ГУРТКА ЮНИЙ ФІНАНСИСТ
ПРОГРАМА РОБОТИ ГУРТКА ЮНИЙ ФІНАНСИСТ ПЕРЕЛІК ТЕМ ЗАНЯТЬ У ГУРТКУ ЮНИЙ ФІНАНСИСТ Сутність і сфери застосування фінансів...

Робоча програма та методичні рекомендації до вивчення навчальної дисципліни Історія України за вимогами кредитно-модульної системи навчання КИЇВ
НАВЧАЛЬНО НАУКОВИЙ ІНСТИТУТ ПРАВА ТА ПСИХОДОГІЇ... Кафедра гуманітарних дисциплін...

З використанням програми MS ACCESS
До виконання лабораторних робіт... З використанням програми MS ACCESS...

Лекція 6 Розбиття програм на множину потоків
На сайте allrefs.net читайте: Лекція_6.

РОБОЧА ПРОГРАМА НАВЧАЛЬНОЇ ДИСЦИПЛІНИ Основи суспільної географії
Кафедра економічної і соціальної географії... ЗАТВЕРДЖУЮ Проректор з науково педагогічної...

Висвітлено економічні основи суспільного виробництва, ринкової економіки, шляхи економічного зростання держави і добробуту людей
Автор Кулаєць Г П заступник директора з навчальної роботи... Рецензенти Дребот С Д викладач Надвірнянського коледжу Скиба Л А викладач Івано франківського комерційного технікуму...

ПОЛОЖЕННЯ ПРО ДЕРЖАВНИЙ ЕКЗАМЕН З ЕКОНОМІЧНОЇ ТЕОРІЇ ДЛЯ СТУДЕНТІВ БАКАЛАВРСЬКИХ ПРОГРАМ З ЕКОНОМІКИ І МЕНЕДЖМЕНТУ ВСІХ ФОРМ НАВЧАННЯ
Випускники вищих навчальних закладів повинні орієнтуватися у широкому колі економічних питань позитивні вміти давати...

РОБОЧА ПРОГРАМА НАВЧАЛЬНОЇ ДИСЦИПЛІНИ ТАКТИКО-СПЕЦІАЛЬНА ПІДГОТОВКА
ВНУТРІШНІХ СПРАВ... ФАКУЛЬТЕТ ПІДГОТОВКИ ФАХІВЦІВ ДЛЯ ПІДРОЗДІЛІВ... МІЛІЦІЇ ГРОМАДСЬКОЇ БЕЗПЕКИ...

0.022
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам