- W:权重图
- d[u]:u 到终点的距离
- s、t:始点和终点
def dag_sp(W, s, t, d):
if s == t:
return 0
if s not in d:
d[s] = min(W[s][v] + dag_sp(W, v, t, d) for v in W[s])
return d[s]
DAG = {
'a': {'b':0},
'b': {'c':4, 'd':6},
'c': {'g':2, 'h':-6},
'd': {'f':3, 'e':5},
'e': {'g':0, 'h':-6},
'f': {'i':-1},
'g': {'h':4},
'h': {'i':7},
'i': {}
}
d = {}
print(dag_sp(DAG, 'a', 'i', d))
# 5