Skip to content

Commit 28935e3

Browse files
committed
Add problem 743 - Network Delay Time
1 parent b878fb8 commit 28935e3

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

problems/graph/network_delay_time.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import heapq
2+
from collections import defaultdict
3+
from typing import List
4+
5+
6+
class NetworkDelayTime:
7+
@staticmethod
8+
def networkDelayTime(times: List[List[int]], n: int, k: int) -> int:
9+
# Dictionary to represent graph
10+
graph = defaultdict(list)
11+
for u, v, w in times:
12+
graph[u].append((v, w))
13+
# Set to store visited nodes
14+
visited = set()
15+
# Min heap
16+
min_heap = [(0, k)]
17+
# Process all nodes in the heap
18+
while min_heap:
19+
travel_time, node = heapq.heappop(min_heap)
20+
visited.add(node)
21+
22+
if len(visited) == n:
23+
return travel_time
24+
25+
for neighbor, time in graph[node]:
26+
if neighbor not in visited:
27+
heapq.heappush(min_heap, (travel_time + time, neighbor))
28+
29+
return -1
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import unittest
2+
3+
from problems.graph.network_delay_time import NetworkDelayTime
4+
5+
6+
class TestNetworkDelayTime(unittest.TestCase):
7+
8+
def setUp(self):
9+
self.network_delay_time = NetworkDelayTime()
10+
11+
def test_network_delay_time(self):
12+
# Test case 1: Basic case with all nodes reachable
13+
self.assertEqual(self.network_delay_time.networkDelayTime([[2, 1, 1], [2, 3, 1], [3, 4, 1]], 4, 2), 2)
14+
15+
# Test case 2: Node unreachable
16+
self.assertEqual(self.network_delay_time.networkDelayTime([[1, 2, 1]], 2, 1), 1)
17+
18+
# Test case 3: Single node, self delay is 0
19+
self.assertEqual(self.network_delay_time.networkDelayTime([], 1, 1), 0)
20+
21+
# Test case 4: All nodes connected in a line
22+
self.assertEqual(self.network_delay_time.networkDelayTime([[1, 2, 1], [2, 3, 1], [3, 4, 1]], 4, 1), 3)
23+
24+
# Test case 5: Empty times array, unreachable nodes
25+
self.assertEqual(self.network_delay_time.networkDelayTime([], 2, 1), -1)
26+
27+
# Test case 6: Cycle in the graph
28+
self.assertEqual(self.network_delay_time.networkDelayTime([[1, 2, 1], [2, 3, 2], [3, 1, 3]], 3, 1), 3)
29+
30+
31+
if __name__ == '__main__':
32+
unittest.main()

0 commit comments

Comments
 (0)