June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
37
Task/Topological-sort/Julia/topological-sort.julia
Normal file
37
Task/Topological-sort/Julia/topological-sort.julia
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
function toposort(data::Dict{T,Set{T}}) where T
|
||||
data = copy(data)
|
||||
for (k, v) in data
|
||||
delete!(v, k)
|
||||
end
|
||||
extraitems = setdiff(reduce(∪, values(data)), keys(data))
|
||||
for item in extraitems
|
||||
data[item] = Set{T}()
|
||||
end
|
||||
rst = Vector{T}()
|
||||
while true
|
||||
ordered = Set(item for (item, dep) in data if isempty(dep))
|
||||
if isempty(ordered) break end
|
||||
append!(rst, ordered)
|
||||
data = Dict{T,Set{T}}(item => setdiff(dep, ordered) for (item, dep) in data if item ∉ ordered)
|
||||
end
|
||||
@assert isempty(data) "a cyclic dependency exists amongst $(keys(data))"
|
||||
return rst
|
||||
end
|
||||
|
||||
data = Dict{String,Set{String}}(
|
||||
"des_system_lib" => Set(split("std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee")),
|
||||
"dw01" => Set(split("ieee dw01 dware gtech")),
|
||||
"dw02" => Set(split("ieee dw02 dware")),
|
||||
"dw03" => Set(split("std synopsys dware dw03 dw02 dw01 ieee gtech")),
|
||||
"dw04" => Set(split("dw04 ieee dw01 dware gtech")),
|
||||
"dw05" => Set(split("dw05 ieee dware")),
|
||||
"dw06" => Set(split("dw06 ieee dware")),
|
||||
"dw07" => Set(split("ieee dware")),
|
||||
"dware" => Set(split("ieee dware")),
|
||||
"gtech" => Set(split("ieee gtech")),
|
||||
"ramlib" => Set(split("std ieee")),
|
||||
"std_cell_lib" => Set(split("ieee std_cell_lib")),
|
||||
"synopsys" => Set(),
|
||||
)
|
||||
|
||||
println("# Topologically sorted:\n - ", join(toposort(data), "\n - "))
|
||||
Loading…
Add table
Add a link
Reference in a new issue