Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Prima(list) #список весов
- que = [1] # очередь
- unused = range(2, length(list), step = 1) #массив со всеми не юзаемыми
- result = [1] #первый элемент дерева
- while !isempty(que) #пока
- indx_1 = 1 #ищем первый неотрицательный вес для начала дека результата
- for i in unused
- if list[result[1]][i] >=0
- indx_1 = i
- break
- end
- end
- for i in unused
- if list[result[1]][i] < list[result[1]][indx_1] #ищем минимум из всех неотрицательных
- indx_1 = i
- end
- end
- indx_2 = 1 #та же шляпа для второго
- for i in unused
- if list[result[length(result)]][i] >=0
- indx_2 = i
- break
- end
- end
- for i in unused #обходим все неиспользованные элементы
- if list[result[length(result)]][i] < list[result[length(result)]][indx_2]
- indx_2 = i
- end
- end
- if list[result[1]][indx_1] >= list[result[length(result)]][indx_2] #если ребро с конца дерево меньше чем в начале
- push!(result, indx_2) #добавляем элемент в конец
- deleteat!(unused, findfirst(unused, indx_2)) #удаляем его из неиспользованных
- push!(que, indx_2) #добавляем в очередь
- end
- if list[result[1]][indx_1] < list[result[length(result)]][indx_2]#если в начале ребро меньшего веса
- pushfirst!(result, indx_1)#добавляем в начало
- deleteat!(unused, findfirst(unused, indx_1))#удаляем из неиспользованеных
- push!(que, indx_1) #добавляем в очередь
- end
- popfirst!(que) #удаляем прошлый элемент из очереди
- end
- return result
- end
- 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]]
- print(Prima(list))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement