Created
April 7, 2018 00:04
-
-
Save tugloo1/6e84718bc2504d39501098b9dbb84c19 to your computer and use it in GitHub Desktop.
this thing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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