Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ A repo for storing Python code and tracking learning progress. All programs are
.
├── README.md
├── algorithms
│ ├── bfs.py
│ ├── binary_search.py
| ├── bubble_sort.py
| ├── dfs.py
| ├── quicksort.py
│ └── selection_sort.py
├── asynchronous_programming
Expand Down
48 changes: 48 additions & 0 deletions algorithms/bfs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from collections import deque


def bfs(graph: dict[str, list[str]], start: str, target: str) -> bool:
return _bfs(graph, start, target, seen=set())


def _bfs(
graph: dict[str, list[str]],
node: str,
target: str,
seen: set[str],
) -> bool:

queue = deque([node])
seen.add(node)
while queue:
current = queue.popleft()
if current == target:
return True
for child in graph[current]:
if child not in seen:
seen.add(child)
queue.append(child)
return False


def main() -> None:
graph = {
"(A)": ["(B)", "(C)"],
"(B)": ["(D)", "(E)"],
"(C)": ["(F)"],
"(D)": [],
"(E)": [],
"(F)": [],
}
start = "(A)"
target = "(F)"

found = bfs(graph, start, target)
if found:
print(f"Target {target} was found!")
else:
print(f"Target {target} was not found.")


if __name__ == "__main__":
main()
42 changes: 42 additions & 0 deletions algorithms/dfs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
def dfs(graph: dict[str, list[str]], start: str, target: str) -> bool:
return _dfs(graph, start, target, seen=set())


def _dfs(
graph: dict[str, list[str]],
node: str,
target: str,
seen: set[str]
) -> bool:

if node == target:
return True
seen.add(node)
for child in graph[node]:
if child not in seen:
if _dfs(graph, child, target, seen):
return True
return False


def main() -> None:
graph = {
"(A)": ["(B)", "(C)"],
"(B)": ["(D)", "(E)"],
"(C)": ["(F)"],
"(D)": [],
"(E)": [],
"(F)": [],
}
start = "(A)"
target = "(F)"

found = dfs(graph, start, target)
if found:
print(f"Target {target} was found!")
else:
print(f"Target {target} was not found.")


if __name__ == "__main__":
main()
Loading