Skip to content

Commit 170f5bc

Browse files
committed
Add python datastructure algo
1 parent a71618f commit 170f5bc

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed

graphs/floyd_warshall.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Algorithm to find shortest paths between all pairs of vertices in a weighted graph.
2+
3+
def floyd_warshall(graph):
4+
"""
5+
graph: adjacency matrix (2D list)
6+
returns: distance matrix (shortest path between all pairs)
7+
"""
8+
n = len(graph)
9+
dist = [row[:] for row in graph]
10+
11+
for k in range(n):
12+
for i in range(n):
13+
for j in range(n):
14+
if dist[i][k] + dist[k][j] < dist[i][j]:
15+
dist[i][j] = dist[i][k] + dist[k][j]
16+
return dist
17+
18+
19+
if __name__ == "__main__":
20+
INF = 99999
21+
graph = [
22+
[0, 5, INF, 10],
23+
[INF, 0, 3, INF],
24+
[INF, INF, 0, 1],
25+
[INF, INF, INF, 0]
26+
]
27+
28+
result = floyd_warshall(graph)
29+
print("All-Pairs Shortest Paths:")
30+
for row in result:
31+
print(row)

graphs/topological_sort.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Perform topological sort on a directed acyclic graph (DAG)
2+
3+
from collections import defaultdict
4+
5+
class Graph:
6+
def __init__(self):
7+
self.graph = defaultdict(list)
8+
9+
def add_edge(self, u, v):
10+
self.graph[u].append(v)
11+
12+
def topological_sort_util(self, v, visited, stack):
13+
visited[v] = True
14+
for i in self.graph[v]:
15+
if not visited[i]:
16+
self.topological_sort_util(i, visited, stack)
17+
stack.append(v)
18+
19+
def topological_sort(self):
20+
visited = {key: False for key in self.graph}
21+
stack = []
22+
for vertex in self.graph:
23+
if not visited[vertex]:
24+
self.topological_sort_util(vertex, visited, stack)
25+
print(stack[::-1])
26+
27+
if __name__ == "__main__":
28+
g = Graph()
29+
g.add_edge(5, 2)
30+
g.add_edge(5, 0)
31+
g.add_edge(4, 0)
32+
g.add_edge(4, 1)
33+
g.add_edge(2, 3)
34+
g.add_edge(3, 1)
35+
g.topological_sort()

strings/binary_search_recursive.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
def binary_search(arr, target, low, high):
2+
if low > high:
3+
return -1
4+
mid = (low + high) // 2
5+
if arr[mid] == target:
6+
return mid
7+
elif arr[mid] > target:
8+
return binary_search(arr, target, low, mid - 1)
9+
else:
10+
return binary_search(arr, target, mid + 1, high)
11+
12+
13+
if __name__ == "__main__":
14+
arr = [2, 4, 6, 8, 10, 12]
15+
target = 10
16+
result = binary_search(arr, target, 0, len(arr) - 1)
17+
print(f"Element found at index {result}" if result != -1 else "Not found")

0 commit comments

Comments
 (0)