非常经典的寻路问题,用一般的dfs思路,全局记录当前路径信息和最优路径信息,即可很简单的写出代码。
import sys
import copy
(N,M,S,D)=(int(x) for x in raw_input().split())
Map=[[-1 for x in range(N)] for y in range(N)]
Cost=[[-1 for x in range(N)] for y in range(N)]
for i in range(M):
line=raw_input().split()
a=int(line[0])
b=int(line[1])
dis=int(line[2])
cost=int(line[3])
Map[a][b]=dis
Map[b][a]=dis
Cost[a][b]=cost
Cost[b][a]=cost
isReached=[False for x in range(N)]
curPath=[S]
minPath=[]
curDis=0
minDis=sys.maxint
curCost=0
minCost=sys.maxint
def dfs(cur):
global isReached,curPath,minPath,curDis,minDis,curCost,minCost
if cur==D:
#reach
if curDis<minDis:
minDis=curDis
minPath=copy.deepcopy(curPath)
minCost=curCost
elif curDis==minDis:
if curCost<minCost:
minCost=curCost
minPath=copy.deepcopy(curPath)
return
for i in range(N):
if not isReached[i] and Map[cur][i]!=-1:
#dfs
isReached[i]=True
curDis+=Map[cur][i]
curCost+=Cost[cur][i]
curPath.append(i)
dfs(i)
del curPath[-1]
curCost-=Cost[cur][i]
curDis-=Map[cur][i]
isReached[i]=False
dfs(S)
for i in minPath:
print i,
print minDis,minCost