Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Програмний засіб знаходження найкоротших шляхів в графі

Реферат Програмний засіб знаходження найкоротших шляхів в графі





t_transfer=t.current_transfer + tr;// збільшимо кількість

пересадок

tt.current_weight=t.current_weight + w;// збільшимо вартість шляху

//перерахувати показники

tt.start=vv; .finish=t.finish; ttt=new Thread (tbfs);// створили потік

ttt.Start (tt);// пустили потік з парамет

}

//якщо ж ми не дійшли ще до фінальної вершини

} _ count--;// не забути зменшити поточну кількість потоків

}

//пошук в шірінуvoid bfs (int s, int finish)

{

//окремо потрібно розглянути випадок якщо стартова вершина

збігається з фінальною (s == finish)

{// звичайно це рідкісний випадок, але тим не менш

best_path.Push (s) ;;

} _ path.Push (s);// в стеку лежить шлях, а шлях ми починаємо з

стартовою вершини

//чергу стеків вершин, а в кожному стеці лежить шлях

Queue lt; Stack lt; int gt; gt; qV=new Queue lt; Stack lt; int gt; gt; ();

qV.Enqueue (new Stack lt; int gt; (current_path));// поклали в чергу

поточний шлях

//чергу стеків р? бер, а в кожному стеці лежить шлях

Queue lt; Stack lt; int gt; gt; qE=new Queue lt; Stack lt; int gt; gt; () ;. Enqueue (new Stack lt; int gt; (current_pathE));// поклали в чергу

поточний шлях

Queue lt; int gt; qW=new Queue lt; int gt; ();// чергу ваг для кожного путі.Enqueue (0);// поклали в чергу поточний нульову вагу lt; int gt; qT=new Queue lt; int gt; ();// чергу кількості пересадок для

кожного путі.Enqueue (0);// поклали в чергу поточне нульове кількість

пересадок (qV.Count!=0)//поки ми не переглянемо всі можливі шляхи

{_ path=new Stack lt; int gt; (qV.Dequeue ());// дістаємо з стека

поточний шлях вершін_pathE=new Stack lt; int gt; (qE.Dequeue ());// Дістаємо з стека

поточний шлях ребер

current_weight=qW.Dequeue ();// дізнаємося його вага

current_transfer=qT.Dequeue ();// Дізнаємося скільки пересадок було на

цьому путіv;// номер поточної вершини=current_path.Peek ();// Дізнаємося номер поточної вершини (v == finish)

{

//якщо дійшли до фінальної вершини

if (current_weight lt; best_weight)

{_ weight=current_weight; _path=new Stack lt; int gt; (current_path); _ pathE=new Stack lt; int gt; (current_pathE);

}

//якщо дійшли до фінальної вершини

}

{

//якщо ж ми не дійшли ще до фінальної вершини

//йти з цієї вершини в усі інші по черзі

foreach (int iE in tn.aVertex [v] .iEdge)

{vv;// один з варіантів, куди можна піти

if (tn.aEdge [iE] .srcVertex == v)=tn.aEdge [iE] .destVertex;=tn.aEdge [iE] .srcVertex;

if (current_path.Contains (vv) == true)//туди йти не можна, ми там вже

були;// і далі можна цю вершину не обраховують (tn.aVertex [vv] .Enabled == false)//в неї йти не можна, вона

заблокована;// і далі можна цю вершину не обраховують

//по цьому ребру йти не можна, воно заблоковане

if (tn.aEdge [iE] .Enabled == false)

continue;// і далі можна цю вершин не обсчітиватьw=tn.aEdge [iE] .Weight;// вага того ребра по якому ми можемо

піти

if (current_weight + w gt; best_weight)//є легші шляхи

continue;// і далі можна цю вершин не обсчітиватьt;// чи потрібна пересадка для потрапляння в наступну

//вона потрібна якщо вершини належать різним транспортним мережам

if (tn.aVertex [v] .iGraph!=tn.aVertex [vv] .iGraph)

t=1;=0;

//є більш короткі шляхи

if (current_transfer + t gt; numericUpDownTransfer.Value)

continue;// і далі можна цю вершину не обраховують

//йти в цю вершіну_path.Push (vv);// покласти в стек вершіну_pathE.Push (iE);// покласти в стек ребро

//йти в цю вершину

//перерах...


Назад | сторінка 21 з 24 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Анексія Криму, як можна вірішіті Конфлікт України с Россией чі можна его ві ...
  • Реферат на тему: Пошук вершини в графі між двома заданими вершинами
  • Реферат на тему: Коли працювати можна менше ...
  • Реферат на тему: Шизофренія. Лікувати, не можна хворіти
  • Реферат на тему: Вправи, якими можна виміряти рівень розвитку координаційних здібностей