Skip to main content
Practice

traversal-tickets

---
id: traversal-tickets
title: Finding Travel Itinerary Explanation
description: Write a Python function using recursion and DFS to find a travel itinerary using flight tickets
tags:
- Python
- DFS
- Recursion
- Travel Itinerary
sidebar_position: 16
isPublic: false
---

# Finding Travel Itinerary Explanation

We will write a function to find possible travel itineraries using flight tickets.

This process will be implemented using `recursion` and `Depth-First Search (DFS)`.

<br />

## Function Implementation

1. `Initialize the Graph`:

- Create a graph using the departure and destination of each ticket.

- This graph stores a list of all destinations reachable from each airport.

2. `Sort Tickets`:

- Sort tickets departing from each airport in reverse order. This allows the DFS to explore the lexicographically smallest route first.

3. `Implement the DFS Function`:

- Define a recursive function `dfs` that explores all possible routes starting from the current airport.

- After exploration, add the route to the `route` list.

4. `Calculate the Final Route`:

- Initiate the `dfs` function starting from the `JFK` airport.

- Since routes are stored in reverse order, reverse the list before returning the final result.

<br />

```python title="Optimal Solution"
def solution(tickets):
graph = {} # Initialize the graph
for start, end in tickets:
graph.setdefault(start, []).append(end) # Add departure and destination pairs
graph.setdefault(end, [])

# Sort tickets
for airport in graph:
graph[airport].sort(reverse=True)

route = [] # Store the route

# DFS function
def dfs(airport):
while graph[airport]:
dfs(graph[airport].pop()) # Move to the next destination
route.append(airport) # Add to route

dfs("JFK") # Start from 'JFK'
return route[::-1] # Return the final route

Example Usage

Example Input/Output
print(solution([["JFK", "SFO"], ["LAX", "MIA"], ["SFO", "LAX"]]))  # Output: ["JFK", "SFO", "LAX", "MIA"]

In this example, the task is to find a possible travel itinerary using the given tickets. The tickets are ["JFK", "SFO"], ["LAX", "MIA"], ["SFO", "LAX"], representing the departure and destination. The goal is to find the lexicographically smallest route using all the tickets.

The function solution finds the following itinerary using these tickets: ["JFK", "SFO", "LAX", "MIA"]. This route uses all the tickets and is the smallest in lexicographical order.

The route is created by departing from "JFK" to "SFO", then continuing to "LAX" and finally arriving at "MIA". This satisfies the given conditions, so the function returns this route.

Want to learn more?

Join CodeFriends Plus membership or enroll in a course to start your journey.