Single source
def greedy_search(graph, start):
n = len(graph)
dist = [float('inf')] * n # Initialize distances to infinity
dist[start] = 0 # Distance to start node is 0
visited = [False] * n # To keep track of visited nodes
for _ in range(n):
u = -1
min_dist = float('inf')
for i in range(n):
if not visited[i] and dist[i] < min_dist:
u = i
min_dist = dist[i]
if u == -1:
break
visited[u] = True
for v, w in graph[u]:
if not visited[v] and dist[u] + w < dist[v]:
dist[v] = dist[u] + w
return dist
n = int(input("Enter number of nodes: "))
graph = {i: [] for i in range(n)}
m = int(input("Enter number of edges: "))
for _ in range(m):
u, v, w = map(int, input("Enter edge (u v weight): ").split())
graph[u].append((v, w))
graph[v].append((u, w))
start_node = int(input("Enter start node: "))
distances = greedy_search(graph, start_node)
print(f"Shortest distances from node {start_node}: {distances}")