# Unexpected shortest path for weighted graph

Hello, I’m getting an unexpected result while trying to find the shortest path in a weighted graph. I am using the python igraph library version `0.10.4` and the first result of `get_k_shortest_paths` is returning a path using an edge that has a higher weight. Is this expected? If so, does igraph provide a means to get find the minimal weight path?

Code for reproducing the behavior:

``````import igraph
import matplotlib.pyplot as plt

def pretty_print_weighted_graph(graph: igraph.Graph):
print("Vertices:")
for vertex in graph.vs:
print(f"{vertex.index}: {vertex['name']}")

print("\nEdges:")
for edge in graph.es:
source = graph.vs[edge.source]['name']
target = graph.vs[edge.target]['name']
weight = edge['weight']
print(f"{source} --({weight})--> {target}")

def main():
graph = igraph.Graph(directed=True)
(0, 1)])
weights = [1, 10]
graph.es["weight"] = weights
graph.vs["name"] = [0, 1]
pretty_print_weighted_graph(graph)

# attempt to find the shortest weighted path
start = 0
finish = 1
print("igraph version: ", igraph.__version__)
print("is_weighted? ", graph.is_weighted())
#path = graph.get_shortest_path(v=start, to=finish, mode=igraph.OUT, weights=graph.es["weight"], output="vpath")
path = graph.get_k_shortest_paths(v=start,
to=finish,
k=1,
mode=igraph.OUT,
weights=graph.es["weight"],
output="vpath")
for i in range(1, len(path)):
eid = graph.get_eid(path[i-1], path[i])
print(f"vertex: {graph.vs[path[i]]['name']}")
print(f"eid:    {eid}")
print(f"weight: {graph.es[eid]['weight']}")

_, ax = plt.subplots()
igraph.plot(graph, target=ax)
plt.show()

if __name__ == "__main__":
main()
``````

You have multiple edges between the same two vertices. You cannot disambiguate between them if you only specify the edge endpoints. Use `output='epath'` to get the paths in terms of edge IDs instead of in terms of vertex IDs.

Understood. I had a sneaking suspicion this was user error and appreciate the explanation. Thanks!