Facebook
From Gruff Goose, 4 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 254
  1. clc
  2. clear
  3. time = 0;
  4. licznik = 1;
  5. czas_calosci = 0;
  6. for n = 5:5:100                                     % Pętla wybierająca ilość węzłów z krokiem 5
  7.     for l = 1:1:30                                  % Wyznaczanie prawidłowej średniej - utworzenie krawędzi
  8.         W = 1+ceil(rand(1)*100 )                     % Losowanie wag dla powstałych węzłów
  9.         for i = 1:n
  10.            for j = 1:n
  11.                 if i==j                             % Jezeli obie wartości są równe..
  12.                     W(i, j) = 0;                    % Przerwanie pętli jeśli obie wartości sa takie same
  13.                 end
  14.             end
  15.         end
  16.         s = 1;                                      % Wierzchołek startowy
  17.         t = 5;                                      % Wierzchołek końcowy
  18.         newlabel = 0;                               % Zmienna pomocnicza przechowujaca cechę tymczasową
  19.        
  20.         for v = 1:n
  21.             dist(v) = inf                           % Ustawienie odległości między wierzchołkami na nieskończoność
  22.             final(v) = false                        % Ustawienie drogi na drogę tymczasową - false
  23.             pred(v) = -1;                           % Ustawienie poprzedniego wierzchołka na -1
  24.         end
  25.        
  26.         dist(s)=0;                                  % Odległość od początku do danego wierzchołka
  27.         final(s) = true;                            % Ustawienie drogi na drogę stałą - true
  28.         recent = s;                                 % Zmienna pomocnicza oznaczająca poprzedni wierzchołek
  29.         tic;                                        % Rozpoczęcie odliczania czasu
  30.         while final(t)==false                       % Pętla działająca dopóki algorytm uznaje drogę tymczasową dla ostatniego wierzchołka
  31.             for v = 1:n
  32.                 newlabel=dist(recent)+W(recent, v); % Przypisanie odległości poprzednich wartości
  33.                 if newlabel<dist(v)                 % Jezeli powyższa wartość jest mniejsza od aktualnej odległości..
  34.                     dist(v)=newlabel;               % Ustawienie odległości na powyższy wynik
  35.                     pred(v)=recent;                 % Ustawienie poprzedniego wierzchołka na aktualny
  36.                 end
  37.             end
  38.            
  39.             temp = inf;                             % Przypisanie tymczasowej wartości 'nieskończoność' dla zmiennej temp
  40.             for  v = 1:n
  41.                 if (final(v)==false)                % Jeżeli aktualna droga jest drogą tymczasową..
  42.                     if (dist(v)<temp)               % Jezeli aktualna odległość jest mniejsza od zmiennej temp..
  43.                         y=v;                        % Podstawienie aktualnej wartości pod zmienną y
  44.                         temp = dist(v);             % Podstawienie aktualnej odległości pod zmienną temp
  45.                     end
  46.                 end
  47.             end
  48.             if (temp<inf)                           % Jeżeli zmienna temp jest mniejsza od nieskończoności..
  49.                 final(y)=true;                      % Ustawienie aktualnej drogi na drogę stałą
  50.                 recent=y;                           % Ustawienie poprzedniego wierzchołka na aktualny
  51.             else
  52.                 final(t)=true;                      % Ustawienie drogi na drogę stałą
  53.             end
  54.         end
  55.         czas_calosci = czas_calosci + toc;          % Zakończenie liczenia czasu
  56.     end
  57. end