Skip to content

Instantly share code, notes, and snippets.

@tugloo1
Created April 7, 2018 00:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tugloo1/6e84718bc2504d39501098b9dbb84c19 to your computer and use it in GitHub Desktop.
Save tugloo1/6e84718bc2504d39501098b9dbb84c19 to your computer and use it in GitHub Desktop.
this thing
def get_edge_order(sorted_edges, all_nodes):
set_trackers = {node: set(node) for node in all_nodes}
edge_order = []
for edge, _ in sorted_edges:
node1, node2 = edge[0], edge[1]
# Case where the nodes already belong to the same set
if set_trackers[node1] == set_trackers[node2]:
continue
else:
set_that_has_node1 = set_trackers[node1]
set_that_has_node2 = set_trackers[node2]
for node in set_that_has_node2:
set_that_has_node1.add(node)
set_trackers[node] = set_that_has_node1
edge_order.append(edge)
return edge_order
def get_sorted_edges(tree):
edges_mapped = {}
for node in tree:
for connected_node, connected_node_weight in tree[node]:
edge = node + connected_node
flipped_edge = connected_node + node
if edge in edges_mapped or flipped_edge in edges_mapped:
continue
edges_mapped[edge] = connected_node_weight
sorted_edges = sorted(edges_mapped.items(), key=lambda x:x[1])
return sorted_edges
def question3(tree):
sorted_edges = get_sorted_edges(tree)
edge_order = get_edge_order(sorted_edges, tree.keys())
output = {}
for edge in edge_order:
node1, node2 = edge[0], edge[1]
if node1 not in output:
for connected_node, connected_node_weight in tree[node1]:
if connected_node == node2:
output[node1] = [(connected_node, connected_node_weight)]
continue
else:
for connected_node, connected_node_weight in tree[node2]:
if connected_node == node1:
output[node2] = [(connected_node, connected_node_weight)]
output[node2] = tree[node2]
return output
input_graph = {'A': [('B', 3), ('C', 4)],
'B': [('A', 3), ('C', 5), ('D', 6), ('E', 2)],
'C': [('B', 5), ('A', 4), ('E', 7)],
'D': [('B', 6)],
'E': [('B', 2), ('C', 7)]}
print(question3(input_graph))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment