OneCompiler

Single source

76

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}")