Advertisement
Guest User

Untitled

a guest
Oct 7th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 4.72 KB | None | 0 0
  1. // алгоритм Дейсктры для поиска длин кратчайших путей до вершины
  2. function [res]=dijkstraDistance(a, destintation)
  3.     maximum = 999;
  4.    
  5.     s = length(a(1,: ));
  6.     distance = ones(1, length(a(1,: ))) * maximum;
  7.     vizited = zeros(1, length(a(1,: )));
  8.     m = destintation + 1;
  9.     count = 0;
  10.     index = 0;
  11.     i = 0;
  12.     u = 0;
  13.    
  14.     distance(1, destintation) = 0;
  15.     for count = 1: (s - 1)
  16.         minimum = maximum;
  17.         for i = 1: s
  18.             if vizited(1, i) == 0 & distance(1, i) <= minimum then
  19.                 minimum = distance(1, i);
  20.                 index = i;
  21.             end
  22.         end
  23.        
  24.         u = index;
  25.         vizited(1, u) = 1;
  26.         for i = 1: s
  27.             if vizited(1, i) == 0 & a(u, i) < > 0 & distance(1, u) < > maximum & (distance(1, u) + a(u, i)) < distance(1, i) then
  28.                 distance(1, i) = a(u, i) + distance(1, u);
  29.             end
  30.         end
  31.     end
  32.    
  33.     res = distance;
  34. endfunction
  35.  
  36.  
  37.  
  38. // анализ графа
  39. function process(a)
  40.     n = length(a(1, :));
  41.     m = sum(a) / 2;
  42.    
  43.     disp(a, 'Матрица смежности:');
  44.    
  45.     v = [];
  46.     for i = 1:n
  47.         v(i,:) = [sum(a(i, :)), sum(a(:, i))];
  48.     end
  49.    
  50.     for i = 1:n
  51.         if v(i, 1) == v(i, 2) & v(i, 1) == 0 then
  52.             disp(i, 'Изолированная вершина:');
  53.         elseif v(i, 2) == 0 then
  54.             disp(i, 'Висячая вершина:');
  55.         elseif v(i, 1) == 0 then
  56.             disp(i, 'Тупиковая вершина:');
  57.         end
  58.     end
  59.    
  60.     // ------------------------------------------
  61.    
  62.     R = (1 / 2) * sum(a) / (n - 1) - 1;
  63.    
  64.     disp(R, 'Структурная избыточность:');
  65.    
  66.     // ------------------------------------------
  67.    
  68.     p_ = (2 * m) / n;
  69.     e2 = sum((sum(a, 'r') - p_) .^ 2);
  70.    
  71.     disp(e2, 'Неравномерность связей в структуре:');
  72.    
  73.     // ------------------------------------------
  74.    
  75.     Q = 0;
  76.    
  77.     for i = 1:n
  78.         Q = Q + sum(dijkstraDistance(a, i));
  79.     end
  80.    
  81.     disp(Q, 'Структурная близость элементов между собой:');
  82.     Qmin = n * (n - 1);
  83.     Qrel = Q / Qmin - 1;
  84.    
  85.     disp(Qrel, 'Структурная компактность:');
  86.    
  87.     // ------------------------------------------
  88.    
  89.     function res=z(i)
  90.         res = sum((Q ./ 2) .* sum(dijkstraDistance(a, i)));
  91.     endfunction
  92.    
  93.     zi = [];
  94.     for i = 1:m
  95.         zi(i) = z(i);
  96.     end
  97.    
  98.     zmax = max(zi);
  99.     sigma = (n - 1) * (2 * zmax - n) / (zmax ^ (n - 2));
  100.    
  101.     disp(sigma, 'Индекс центральности:');
  102.    
  103.     // ------------------------------------------
  104.    
  105.     k = 3;
  106.    
  107.     ri = (sum(a, 'r') .^ k) / sum(a);
  108.    
  109.     disp([1:n; ri]', 'Ранги элементов:');
  110. endfunction
  111.  
  112. // ------------- ПОСЛЕДОВАТЕЛЬНАЯ
  113. a1 = [
  114.   0, 1, 0, 0, 0;
  115.   1, 0, 1, 0, 0;
  116.   0, 1, 0, 1, 0;
  117.   0, 0, 1, 0, 1;
  118.   0, 0, 0, 1, 0;
  119. ];
  120.  
  121. disp('===== ПОСЛЕДОВАТЕЛЬНАЯ СТРУКТУРА')
  122. process(a1);
  123.  
  124.  
  125.  
  126. // ------------- КОЛЬЦЕВАЯ
  127. a2 = [
  128.   0, 1, 0, 0, 1;
  129.   1, 0, 1, 0, 0;
  130.   0, 1, 0, 1, 0;
  131.   0, 0, 1, 0, 1;
  132.   1, 0, 0, 1, 0;
  133. ];
  134.  
  135. disp('===== КОЛЬЦЕВАЯ СТРУКТУРА')
  136. process(a2);
  137.  
  138. // ------------- РАДИАЛЬНАЯ
  139. a3 = [
  140.   0, 1, 1, 1, 1;
  141.   1, 0, 0, 0, 0;
  142.   1, 0, 0, 0, 0;
  143.   1, 0, 0, 0, 0;
  144.   1, 0, 0, 0, 0;
  145. ];
  146.  
  147. disp('===== РАДИАЛЬНАЯ СТРУКТУРА')
  148. process(a3);
  149.  
  150. // ------------- ДРЕВОВИДНАЯ
  151. a4 = [
  152.   0, 1, 1, 0, 0;
  153.   1, 0, 0, 0, 0;
  154.   1, 0, 0, 1, 1;
  155.   0, 0, 1, 0, 0;
  156.   0, 0, 1, 0, 0;
  157. ];
  158.  
  159. disp('===== ДРЕВОВИДНАЯ СТРУКТУРА')
  160. process(a4);
  161.  
  162. // ------------- ПОЛНЫЙ ГРАФ
  163. a5 = [
  164.   0, 1, 1, 1, 1;
  165.   1, 0, 1, 1, 1;
  166.   1, 1, 0, 1, 1;
  167.   1, 1, 1, 0, 1;
  168.   1, 1, 1, 1, 0;
  169. ];
  170. disp('===== ПОЛНЫЙ ГРАФ')
  171. process(a5);
  172.  
  173. // ------------- НЕСВЯЗНАЯ
  174. a6 = [
  175.   0, 1, 1, 0, 0;
  176.   1, 0, 0, 0, 0;
  177.   1, 0, 0, 0, 0;
  178.   0, 0, 0, 0, 1;
  179.   0, 0, 0, 1, 0;
  180. ];
  181.  
  182. disp('===== НЕСВЯЗНАЯ СТРУКТУРА')
  183. process(a6);
  184.  
  185. // ------------- ИНДИВИДУАЛЬНЫЙ ГРАФ
  186. a = [
  187.    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0;
  188.    0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0;
  189.    1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0;
  190.    0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0;
  191.    0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0;
  192.    0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0;
  193.    0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0;
  194.    0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0;
  195.    0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0;
  196.    0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0;
  197.    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  198. ];
  199.  
  200. disp('===== ИНДИВИДУАЛЬНЫЙ ГРАФ')
  201. process(a);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement