<｜begin▁of▁sentence｜>### Instruction:
As an automotive designer tasked with optimizing the delivery circuit for a fleet of concept cars to be showcased to clients in various cities, imagine you have the following route matrix detailing the distances in kilometers between each pair of cities: [('City A', 'City B', 3 km), ('City A', 'City C', 17 km), ('City A', 'City D', 14 km), ('City B', 'City C', 12 km), ('City B', 'City D', 16 km), ('City C', 'City D', 4 km), ('City A', 'City E', 21 km), ('City B', 'City E', 13 km), ('City C', 'City E', 9 km), ('City D', 'City E', 20 km)]. For optimal client experience, you need to create a showcase route that starts and ends at the "City D" installation, ensuring the travel path is as cost-efficient as possible for the transportation crew.

Could you employ the "greedy_tsp" function available in NetworkX to draft a cost-effective loop route for these automobiles, adhering to the benchmark set by the given distances between the cities? The goal is to find a layout that minimizes transit time, thus allowing more resources to be allocated to refining the vehicle's features and design elements.
### Response:
from networkx.algorithms import approximation as approx
import networkx as nx

# Create a complete weighted undirected graph
G = nx.Graph()
G.add_weighted_edges_from([
    ('A', 'B', 3), ('A', 'C', 17), ('A', 'D', 14),
    ('B', 'C', 12), ('B', 'D', 16),
    ('C', 'D', 4), ('A', 'E', 21),
    ('B', 'E', 13), ('C', 'E', 9), ('D', 'E', 20)
])

# Compute a low cost cycle starting from a given source node
source_node = 'D'
cycle = approx.greedy_tsp(G, source=source_node)
cost = sum(G[n][nbr]['weight'] for n, nbr in nx.utils.pairwise(cycle))

print('Cycle:', cycle)
print('Cost:', cost)
<|EOT|>
