Advertisement
Guest User

Untitled

a guest
May 14th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 2.40 KB | None | 0 0
  1.  
  2.  
  3. function Prima(list)   #список весов
  4.     que = [1] # очередь
  5.     unused = range(2, length(list), step = 1) #массив со всеми не юзаемыми
  6.     result = [1] #первый элемент дерева
  7.     while !isempty(que) #пока
  8.         indx_1 = 1     #ищем первый неотрицательный вес для начала дека результата
  9.  
  10.        
  11.         for i in unused
  12.             if list[result[1]][i] >=0
  13.                 indx_1 = i
  14.                 break
  15.             end
  16.         end
  17.        
  18.         for i in unused
  19.    
  20.             if list[result[1]][i] < list[result[1]][indx_1] #ищем минимум из всех неотрицательных
  21.                 indx_1 = i
  22.             end
  23.         end
  24.            
  25.         indx_2 = 1 #та же шляпа для второго
  26.        
  27.         for i in unused
  28.             if list[result[length(result)]][i] >=0
  29.                 indx_2 = i
  30.                 break
  31.             end
  32.         end
  33.        
  34.         for i in unused #обходим все неиспользованные элементы
  35.    
  36.             if list[result[length(result)]][i] < list[result[length(result)]][indx_2]
  37.                 indx_2 = i
  38.             end
  39.        
  40.         end
  41.        
  42.         if list[result[1]][indx_1] >= list[result[length(result)]][indx_2] #если ребро с конца дерево меньше чем в начале
  43.             push!(result, indx_2) #добавляем элемент в конец
  44.             deleteat!(unused, findfirst(unused, indx_2)) #удаляем его из неиспользованных
  45.             push!(que, indx_2) #добавляем в очередь
  46.         end
  47.  
  48.         if list[result[1]][indx_1] < list[result[length(result)]][indx_2]#если в начале ребро меньшего веса
  49.             pushfirst!(result, indx_1)#добавляем в начало
  50.             deleteat!(unused, findfirst(unused, indx_1))#удаляем из неиспользованеных
  51.             push!(que, indx_1) #добавляем в очередь
  52.         end
  53.             popfirst!(que) #удаляем прошлый элемент из очереди
  54.    
  55.     end
  56.    
  57.    
  58. return result    
  59. end
  60.  
  61. list = [[-1, 4, 5, -1, -1], [4, -1, -1, 9, 6], [5, -1, -1, 8, -1], [-1, 9, 8,-1, 3], [-1, 6, -1, 3, -1]]
  62.    
  63. print(Prima(list))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement