Describe a software application that would require a graph data structure in its implementation. Explain what the vertices and edges of the graph would represent. Would the graph be undirected or directed? Decide which type of representation would be best for this application. Explain your reasoning.