Teaching Kids Programming – Finding the Network Delay Time via Floyd-Warshall Shortest Path Algorithm


Teaching Kids Programming: Videos on Data Structures and Algorithms

You are given a network of n nodes, labeled from 1 to n. You are also given times, a list of travel times as directed edges times[i] = (ui, vi, wi), where ui is the source node, vi is the target node, and wi is the time it takes for a signal to travel from source to target. We will send a signal from a given node k. Return the time it takes for all the n nodes to receive the signal. If it is impossible for all the n nodes to receive the signal, return -1.

Example 1:

DAG-1 Teaching Kids Programming - Finding the Network Delay Time via  Floyd-Warshall Shortest Path Algorithm algorithms Floyd Warshal graph Graph Algorithm python teaching kids programming youtube video

DAG = Directed Acyclic Graph

Input: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
Output: 2

Example 2:
Input: times = [[1,2,1]], n = 2, k = 1
Output: 1

Example 3:
Input: times = [[1,2,1]], n = 2, k = 2
Output: -1

Constraints:
1 <= k <= n <= 100
1 <= times.length <= 6000
times[i].length == 3
1 <= ui, vi <= n
ui != vi
0 <= wi <= 100
All the pairs (ui, vi) are unique. (i.e., no multiple edges.)

Hints:
We visit each node at some time, and if that time is better than the fastest time we’ve reached this node, we travel along outgoing edges in sorted order. Alternatively, we could use Dijkstra’s algorithm.

Compute the Max Network Delay Time via Floyd-Warshall Shortest Path Algorithm

Floyd-Warshall Algorithm can be used to compute the shortest distance beween any two pairs of vertices in a Graph in O(N^3) time and O(N^2) space.

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
    def networkDelayTime(self, times: List[List[int]], N: int, K: int) -> int:
        dist = [[math.inf for _ in range(N)] for _ in range(N)]
        for u, v, w in times:
            dist[u - 1][v - 1] = w
        for i in range(N):
            dist[i][i] = 0
        for k in range(N):
            for i in range(N):
                for j in range(N):
                    dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
        return max(dist[K-1]) if max(dist[K-1]) < math.inf else -1         
class Solution:
    def networkDelayTime(self, times: List[List[int]], N: int, K: int) -> int:
        dist = [[math.inf for _ in range(N)] for _ in range(N)]
        for u, v, w in times:
            dist[u - 1][v - 1] = w
        for i in range(N):
            dist[i][i] = 0
        for k in range(N):
            for i in range(N):
                for j in range(N):
                    dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
        return max(dist[K-1]) if max(dist[K-1]) < math.inf else -1         

If a vertice is unreachable, the shortest distance i.e. dist[][] will be math.inf. On initialization, dis[a][a] value will be set to zero.

Shortest Path Algorithms

–EOF (The Ultimate Computing & Technology Blog) —

GD Star Rating
loading...
967 words
Last Post: Teaching Kids Programming - Disjoint Set: Find if Path Exists in Graph via Union Find Algorithm
Next Post: Teaching Kids Programming - Dynamic Programming Algorithms to Count the Number of Unique Binary Search Trees (Catalan Numbers)

The Permanent URL is: Teaching Kids Programming – Finding the Network Delay Time via Floyd-Warshall Shortest Path Algorithm

Leave a Reply