python 구현 dijkstra 최 단 경로 알고리즘

Dijkstra 알고리즘:디 제 스 트 라 알고리즘 이 라 고도 부 릅 니 다.디 제 스 트 라 알고리즘 은 네덜란드 컴퓨터 과학자 딕 스 트 라 가 1959 년 에 제 기 했 기 때문에 딕 스 트 라 알고리즘 이 라 고도 부 릅 니 다.하나의 정점 에서 나머지 각 정점 까지 의 최 단 경로 알고리즘 으로 그림 에서 가장 짧 은 경로 문 제 를 해결 합 니 다.디 제 스 트 라 알고리즘 은 시작 점 을 중심 으로 바깥쪽 으로 확장 되 어 종점 까지 확장 되 는 것 이 특징 이다바 이 두 백과
메모:Dijkstra 알고리즘 은 네 거 티 브 를 포함 한 그림 을 처리 할 수 없습니다.

# dijkstra    ,                ,        
def dijkstra(graph,src):
 #        ,        
 if graph is None:
 return None
 nodes = [i for i in range(len(graph))] #         
 visited=[] #                 
 if src in nodes:
 visited.append(src)
 nodes.remove(src)
 else:
 return None
 distance={src:0} #              
 for i in nodes:
 distance[i]=graph[src][i] #    
 # print(distance)
 path={src:{src:[]}} #              
 k=pre=src
 while nodes:
 mid_distance=float('inf')
 for v in visited:
  for d in nodes:
  new_distance = graph[src][v]+graph[v][d]
  if new_distance < mid_distance:
   mid_distance=new_distance
   graph[src][d]=new_distance #       
   k=d
   pre=v
 distance[k]=mid_distance #     
 path[src][k]=[i for i in path[src][pre]]
 path[src][k].append(k)
 #         
 visited.append(k)
 nodes.remove(k)
 print(visited,nodes) #          
 return distance,path
if __name__ == '__main__':
 graph_list = [ [0, 2, 1, 4, 5, 1],
  [1, 0, 4, 2, 3, 4],
  [2, 1, 0, 1, 2, 4],
  [3, 5, 2, 0, 3, 3],
  [2, 4, 3, 4, 0, 1],
  [3, 4, 7, 3, 1, 0]]

 distance,path= dijkstra(graph_list, 0) #      0            
 print(distance,path)
노드 의 옮 겨 다 니 는 과정 은 다음 과 같다.

최 단 경로 출력:

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기