python 动态规划求解单源最短路径

python 动态规划求解单源最短路径_第1张图片

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May 30 10:53:38 2019

@author: lg
"""

import pandas as pd
import numpy as np

df1=pd.DataFrame(np.array([[4,5,2]]),index=["A"],columns=['B1','B2','B3'])

df2=pd.DataFrame(np.array([[6,2,5],[5,3,4],[7,5,8]]),index=['B1','B2','B3'],columns=['C1','C2','C3'])

df3=pd.DataFrame(np.array([[4,4],[4,7],[5,2]]),index=['C1','C2','C3'],columns=['D1','D2'])

df4=pd.DataFrame(np.array([[5],[4]]),index=['D1','D2'],columns=['E'])

ll=[df3,df2,df1]



ll1=[df1,df2]

cv=[]
def pp(t,df):
    
    mm=df.index
    
    f=pd.Series()
    g=[]
    for j in mm:
        m1=df.loc[j]
        m2=m1+t
        m3=m2.sort_values()
        f[j]=m3[0]
        g.append(m3.index[0])
        
    dc=pd.DataFrame()
    
    dc['v']=f.values
    dc['n']=g
    dc.index=f.index
    
#    print(dc)
    
    cv.append(dc)
    
    if len(ll1)>0:
    
        df=ll1.pop()
        t=pp(dc['v'],df)
    else:
        return dc

t1=df4['E']
h1=pp(t1,df3)

for m in range(len(cv)):
    
    xc=cv.pop()
    
    x1=xc.sort_values(by='v')
    
    print(x1['n'].values[0])
       
B1
C3
D2

所以最短路线为A B1 C3 D2 E,这个程序有点,问题实际上可能存在多条路线,这个程序只取一条

你可能感兴趣的:(算法)