Зворотний зв'язок

Алгоритм Дейкстра

4.якщо c=t, то знайдений шлях довжини d(t), якому можна відновити в такий спосіб: це той шлях між s і t, що складається тільки з позначених на кроці (3) ребер (дуг) (можна довести, що він існує й единий); ВИХІД("рішення знайдене");

5.інакше переходимо на крок (1).

Алгоритм можна модифікувати так, щоб він закінчував роботу після одержання усіма вершинами графа G постійних міток, тобто знаходяться найкоротші шляхи з s в усі вершини графа. Алгоритм визначить основне дерево D найкоротших шляхів з вершини s. Для будь-якої вершини v єдиний (s,v) - шлях у дереві D буде найкоротшим (s,v) - шляхом у графі G.

Алгоритм Дейкстра не завжди знаходить правильне рішення у випадку довільних ваг ребер (дуг) графа. Наприклад, для орграфа, зображеного на малюнку, алгоритм Дейкстра знайде маршрут s(s,t)t довжини 1 між вершинами s і t, а не мінімальний маршрут довжини 2+(-2)=0, що проходить через третю вершину графа.

Приклад орграфа, для якого не будем застосовувати алгоритм Дейкста.

Текст програми написаної на основі алгоритму Дейкстра

/* Алгоритм пошуку дерева найкоротших шляхів у зваженому графі */

/* Е.Дейкстра 1959 р. */

#include

#include

#include

int load_matrix(int n, double* weigh);/* Уведення матриці ваг*/

int deik(int n, int s, double* weigh, int* Q, double* L);/* Алгоритм пошуку*/

void print(int n, int* Q, double* L);/* Висновок результату*/

void main(void){

int n=0,s=0,ret=0;

double *weigh;

int* Q;/* Масив міток покажчиків на попередню вершину*/

double* L;/* Масив найдених ваг шляху до вершини*/

printf("\nАлгоpитм пошуку дерева найкоротших шляхів у зваженому графі.\n");

printf("Е.Дейкстpа, 1959 р.\n");

printf("\nВведіть кількість вершин..");

scanf("%d",&n);


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат