def shortest_path(self, target_vertex: str) -> str:
        if target_vertex == self.source_vertex:
            return self.source_vertex

        target_vertex_parent = self.parent.get(target_vertex)
        if target_vertex_parent is None:
            raise ValueError(
                f"No path from vertex: {self.source_vertex} to vertex: {target_vertex}"
            )

        return self.shortest_path(target_vertex_parent) + f"->{target_vertex}"