mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-02-07 18:10:55 +00:00
Added doc_tests to eulerian_path_and_circuit_for_undirected_graph.py
This commit is contained in:
parent
2d671df073
commit
e1271617b7
|
@ -5,8 +5,31 @@
|
||||||
# space complexity is O(VE)
|
# space complexity is O(VE)
|
||||||
|
|
||||||
|
|
||||||
# using dfs for finding eulerian path traversal
|
|
||||||
def dfs(u, graph, visited_edge, path=None):
|
def dfs(u, graph, visited_edge, path=None):
|
||||||
|
"""
|
||||||
|
Using dfs for finding eulerian path traversal
|
||||||
|
Args:
|
||||||
|
u: The start_node
|
||||||
|
graph: The graph to check
|
||||||
|
visited_edge: Specify if a node has been visited or not
|
||||||
|
path: Optional path parameter
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Path
|
||||||
|
|
||||||
|
Example:
|
||||||
|
>>> visited_edge = [[False] * 11 for _ in range(11)]
|
||||||
|
>>> dfs(1, {1: [2, 3], 2: [1, 3], 3: [1, 2]}, visited_edge)
|
||||||
|
[1, 2, 3, 1]
|
||||||
|
>>> dfs(5, {1: [2, 3, 4], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [4]}, visited_edge)
|
||||||
|
[5, 4, 1]
|
||||||
|
>>> dfs(1, {1: [], 2: [], 3: [1, 2]}, visited_edge)
|
||||||
|
[1]
|
||||||
|
>>> dfs(1, {1: [], 2: []}, visited_edge)
|
||||||
|
[1]
|
||||||
|
>>> dfs(1, {1: [], 2: []}, visited_edge, [1, 3])
|
||||||
|
[1, 3, 1]
|
||||||
|
"""
|
||||||
path = (path or []) + [u]
|
path = (path or []) + [u]
|
||||||
for v in graph[u]:
|
for v in graph[u]:
|
||||||
if visited_edge[u][v] is False:
|
if visited_edge[u][v] is False:
|
||||||
|
@ -15,8 +38,29 @@ def dfs(u, graph, visited_edge, path=None):
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
|
||||||
# for checking in graph has euler path or circuit
|
|
||||||
def check_circuit_or_path(graph, max_node):
|
def check_circuit_or_path(graph, max_node):
|
||||||
|
"""
|
||||||
|
For checking in graph has euler path or circuit
|
||||||
|
|
||||||
|
Args:
|
||||||
|
graph: The graph to check
|
||||||
|
max_node: The maximum node to check
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Type of graph, and its circuit or path
|
||||||
|
|
||||||
|
Example:
|
||||||
|
>>> check_circuit_or_path({1: [2, 3], 2: [1, 3], 3: [1, 2]}, 10)
|
||||||
|
(1, -1)
|
||||||
|
>>> check_circuit_or_path({1: [2, 3, 4], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [4]}, 10)
|
||||||
|
(2, 5)
|
||||||
|
>>> check_circuit_or_path({1: [2, 3, 1], 2: [2, 3, 4], 3: [1, 3], 4: [1], 5: []}, 10)
|
||||||
|
(3, 4)
|
||||||
|
>>> check_circuit_or_path({1: [], 2: [], 3: [1, 2]}, 10)
|
||||||
|
(1, -1)
|
||||||
|
>>> check_circuit_or_path({1: [], 2: []}, 10)
|
||||||
|
(1, -1)
|
||||||
|
"""
|
||||||
odd_degree_nodes = 0
|
odd_degree_nodes = 0
|
||||||
odd_node = -1
|
odd_node = -1
|
||||||
for i in range(max_node):
|
for i in range(max_node):
|
||||||
|
@ -33,6 +77,28 @@ def check_circuit_or_path(graph, max_node):
|
||||||
|
|
||||||
|
|
||||||
def check_euler(graph, max_node):
|
def check_euler(graph, max_node):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
graph: The graph to check
|
||||||
|
max_node: The maximum node to check
|
||||||
|
|
||||||
|
Example:
|
||||||
|
>>> check_euler({1: [2, 3], 2: [1, 3], 3: [1, 2]}, 10)
|
||||||
|
graph has a Euler cycle
|
||||||
|
[1, 2, 3, 1]
|
||||||
|
>>> check_euler({1: [2, 3, 4], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [4]}, 10)
|
||||||
|
graph has a Euler path
|
||||||
|
[5, 4, 1, 2, 3, 1]
|
||||||
|
>>> check_euler({1: [2, 3, 1], 2: [2, 3, 4], 3: [1, 3], 4: [1], 5: []}, 10)
|
||||||
|
graph is not Eulerian
|
||||||
|
no path
|
||||||
|
>>> check_euler({1: [], 2: [], 3: [1, 2]}, 10)
|
||||||
|
graph has a Euler cycle
|
||||||
|
[1]
|
||||||
|
>>> check_euler({1: [], 2: []}, 10)
|
||||||
|
graph has a Euler cycle
|
||||||
|
[1]
|
||||||
|
"""
|
||||||
visited_edge = [[False for _ in range(max_node + 1)] for _ in range(max_node + 1)]
|
visited_edge = [[False for _ in range(max_node + 1)] for _ in range(max_node + 1)]
|
||||||
check, odd_node = check_circuit_or_path(graph, max_node)
|
check, odd_node = check_circuit_or_path(graph, max_node)
|
||||||
if check == 3:
|
if check == 3:
|
||||||
|
@ -69,3 +135,7 @@ def main():
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
import doctest
|
||||||
|
|
||||||
|
doctest.testmod()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user