Teaching Kids Programming – Distance Between Bus Stops (Shortest Path in Simple Undirected Weighted Regular Graph) | ninjasquad

**Teaching Kids Programming**: Videos on **Data Structures and Algorithms**

A bus has n stops numbered from 0 to n – 1 that form a circle. We know the distance between all pairs of neighboring stops where distance[i] is the distance between the stops number i and (i + 1) % n. The bus goes along both directions i.e. clockwise and counterclockwise. Return the shortest distance between the given start and destination stops.

Example 1:

Input: distance = [1,2,3,4], start = 0, destination = 1

Output: 1

Explanation: Distance between 0 and 1 is 1 or 9, minimum is 1.Example 2:

Input: distance = [1,2,3,4], start = 0, destination = 2

Output: 3

Explanation: Distance between 0 and 2 is 3 or 7, minimum is 3.Example 3:

Input: distance = [1,2,3,4], start = 0, destination = 3

Output: 4

Explanation: Distance between 0 and 3 is 6 or 4, minimum is 4.Constraints:

1 <= n <= 10^4

distance.length == n

0 <= start, destination < n

0 <= distance[i] <= 10^4Hint:

Find the distance between the two stops if the bus moved in clockwise or counterclockwise directions.

### Distance Between Bus Stops (Shortest Distance in Simple Undirected Weighted Regular Graph)

This is a simple regular Graph where each vertex has a same number of neighbour vertices. This is also a undirected (edges/directions go both way) and weighted graph which has only one cycle. And there are only two routes between any two vertices, and thus we can compute them separately and return the minimal.

We can compute the direct distance (where start is smaller than stop) and let’s denote it x, and the other route has total – x where total is the sum of all the edges.

1 2 3 4 5 6 7 |
class Solution: def distanceBetweenBusStops(self, dist: List[int], start: int, stop: int) -> int: if start > stop: start, stop = stop, start total = sum(dist) x = sum(dist[start: stop]) return min(total - x, x) |

class Solution: def distanceBetweenBusStops(self, dist: List[int], start: int, stop: int) -> int: if start > stop: start, stop = stop, start total = sum(dist) x = sum(dist[start: stop]) return min(total - x, x)

Another algorithm or approach is to sum the distance before the start and after the stop:

1 2 3 4 5 |
class Solution: def distanceBetweenBusStops(self, dist: List[int], start: int, stop: int) -> int: if start > stop: start, stop = stop, start return min(sum(dist[:start]) + sum(dist[stop:]), sum(dist[start: stop])) |

class Solution: def distanceBetweenBusStops(self, dist: List[int], start: int, stop: int) -> int: if start > stop: start, stop = stop, start return min(sum(dist[:start]) + sum(dist[stop:]), sum(dist[start: stop]))

Since this is a Graph, we can also apply the shortest graph algorithms such as Floyd Warshal. However, the time complexity O(N) is optimal on this simple graph problem.

#### Shortest Path Algorithms

–EOF (The Ultimate Computing & Technology Blog) —

**GD Star Rating***loading…*

1048 words

**Last Post**: Teaching Kids Programming – Valid Square Algorithm by Four Points in Cartesian Coordinate System **Next Post**: Teaching Kids Programming – Introduction to Dijkstra Single Source Shortest Path Graph Algorithm

Source: Internet