From ecf623c2c4ad5e672f0f81ef987f445f97ae505b Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Thu, 11 Jan 2024 18:28:03 +0000 Subject: [PATCH] add bfs --- chapter6/bfs1.png | Bin 0 -> 17997 bytes chapter6/bfs2.png | Bin 0 -> 21106 bytes chapter6/ex6.1.py | 42 ++++++++++++++++++++++++++++++++++++++++ chapter6/ex6.2.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 chapter6/bfs1.png create mode 100644 chapter6/bfs2.png create mode 100644 chapter6/ex6.1.py create mode 100644 chapter6/ex6.2.py diff --git a/chapter6/bfs1.png b/chapter6/bfs1.png new file mode 100644 index 0000000000000000000000000000000000000000..629aee86666beaba42062c42b307e66c68aeb4bf GIT binary patch literal 17997 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 literal 0 HcmV?d00001 diff --git a/chapter6/ex6.1.py b/chapter6/ex6.1.py new file mode 100644 index 0000000..c2d9adc --- /dev/null +++ b/chapter6/ex6.1.py @@ -0,0 +1,42 @@ +import logging +from collections import deque +from dataclasses import dataclass + +logging.basicConfig(level=logging.DEBUG) +logger = logging.getLogger(__name__) + + +@dataclass +class Node: + name: str + distance: int + + +graph = { + "s": [Node("a", 1), Node("b", 1)], + "a": [Node("c", 0), Node("f", 0)], + "b": [Node("c", 0), Node("d", 0)], + "c": [], + "d": [Node("f", 0)], + "f": [], +} + + +def bfs(): + queue = deque() + queue += graph["s"] + + while queue: + logger.debug(queue) + current_node = queue.popleft() + if current_node.name == "f": + return current_node.distance + + next_nodes = graph[current_node.name] + for node in next_nodes: + node.distance = current_node.distance + 1 + queue += next_nodes + + +distance = bfs() +print(f"shortest distance from s to f: {distance}") diff --git a/chapter6/ex6.2.py b/chapter6/ex6.2.py new file mode 100644 index 0000000..cebf63d --- /dev/null +++ b/chapter6/ex6.2.py @@ -0,0 +1,48 @@ +import logging +from collections import deque +from dataclasses import dataclass + +logging.basicConfig(level=logging.DEBUG) +logger = logging.getLogger(__name__) + + +@dataclass +class Node: + name: str + distance: int + + +graph = { + "cab": [Node("cat", 1), Node("car", 1)], + "cat": [Node("mat", 0), Node("bat", 0)], + "car": [Node("cat", 0), Node("bar", 0)], + "mat": [Node("bat", 0)], + "bar": [Node("bat", 0)], + "bat": [], +} + +visited = [] + + +def bfs(): + queue = deque() + queue += graph["cab"] + + while queue: + logger.debug(queue) + current_node = queue.popleft() + if current_node.name == "bat": + return current_node.distance + + if current_node.name in visited: + continue + visited.append(current_node.name) + + next_nodes = graph[current_node.name] + for node in next_nodes: + node.distance = current_node.distance + 1 + queue += next_nodes + + +distance = bfs() +print(f"shortest distance from cab to bat: {distance}")