Last active
September 28, 2021 12:00
-
-
Save jegor377/61a9031550805276046187117b82bd4e to your computer and use it in GitHub Desktop.
Generating spanning tree from grid, determining if a grid is a spanning tree, searching for cycle in grid.
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
edges = [[1, 2], [0, 2], [0, 1, 3], [0, 2]] # grid | |
vertices = [1, 2, 3, 4] | |
# edges = [[2], [2], [0, 1, 3], [2]] # spanning tree | |
# vertices = [1, 2, 3, 4] | |
visited = [False] * len(vertices) | |
spanning_tree_edges = [[] for x in range(len(vertices))] | |
def is_spanning_tree_dfs(node, source, _edges): | |
visited[node] = True | |
for next_el in _edges[node]: | |
if not visited[next_el]: | |
if not is_spanning_tree_dfs(next_el, node, _edges): | |
return False | |
elif next_el == source: | |
continue | |
else: | |
return False | |
return True | |
def spanning_tree_dfs(node): | |
visited[node] = True | |
for next_el in edges[node]: | |
if not visited[next_el]: | |
spanning_tree_edges[node].append(next_el) | |
spanning_tree_dfs(next_el) | |
def find_cycle_dfs(node, source, _edges): | |
visited[node] = True | |
for next_el in _edges[node]: | |
if not visited[next_el]: | |
result = find_cycle_dfs(next_el, node, _edges) | |
if result[0]: | |
return [True, [node] + result[1]] | |
elif next_el != source: | |
return [True, [node]] | |
return [False, []] | |
if __name__ == '__main__': | |
spanning_tree_dfs(0) | |
print([[y + 1 for y in x] for x in spanning_tree_edges]) | |
visited = [False] * len(vertices) | |
print(is_spanning_tree_dfs(0, 0, edges)) | |
visited = [False] * len(vertices) | |
print(find_cycle_dfs(0, 0, edges)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment