Hãy thực thi thuật toán Dijkstra bằng Python?
Trả lời (1)
-
Thuật toán cơ bản
Từ mỗi đỉnh chưa đi qua, hãy chọn đỉnh với khoảng cách nhỏ nhất và đi tới điểm đó.
Cập nhật khoảng cách cho mỗi đỉnh lân cận, của các đỉnh đã đi qua mà khoảng cách hiện hành lớn hơn tổng của nó, và trọng số của cạnh giữa 2 đỉnh.
Lập lại bước 1 và 2 cho đến khi tất cả các đỉnh được đi qua.
import sys # Function to find out which of the unvisited node # needs to be visited next def to_be_visited(): global visited_and_distance v = -10 # Choosing the vertex with the minimum distance for index in range(number_of_vertices): if visited_and_distance[index][0] == 0 \ and (v < 0 or visited_and_distance[index][1] <= \ visited_and_distance[v][1]): v = index return v # Creating the graph as an adjacency matrix vertices = [[0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0]] edges = [[0, 3, 4, 0], [0, 0, 0.5, 0], [0, 0, 0, 1], [0, 0, 0, 0]] number_of_vertices = len(vertices[0]) # The first element of the lists inside visited_and_distance # denotes if the vertex has been visited. # The second element of the lists inside the visited_and_distance # denotes the distance from the source. visited_and_distance = [[0, 0]] for i in range(number_of_vertices-1): visited_and_distance.append([0, sys.maxsize]) for vertex in range(number_of_vertices): # Finding the next vertex to be visited. to_visit = to_be_visited() for neighbor_index in range(number_of_vertices): # Calculating the new distance for all unvisited neighbours # of the chosen vertex. if vertices[to_visit][neighbor_index] == 1 and \ visited_and_distance[neighbor_index][0] == 0: new_distance = visited_and_distance[to_visit][1] \ + edges[to_visit][neighbor_index] # Updating the distance of the neighbor if its current distance # is greater than the distance that has just been calculated if visited_and_distance[neighbor_index][1] > new_distance: visited_and_distance[neighbor_index][1] = new_distance # Visiting the vertex found earlier visited_and_distance[to_visit][0] = 1 i = 0 # Printing out the shortest distance from the source to each vertex for distance in visited_and_distance: print("The shortest distance of ",chr(ord('a') + i),\ " from the source vertex a is:",distance[1]) i = i + 1
Dưới đây là đoạn mã thực hiện thuật toán trên
Output:
The shortest distance of a from the source vertex a is: 0
The shortest distance of b from the source vertex a is: 3
The shortest distance of c from the source vertex a is: 3.5
The shortest distance of d from the source vertex a is: 4.5
bởi Nguyễn Thanh Trà 26/11/2021Like (0) Báo cáo sai phạm
Nếu bạn hỏi, bạn chỉ thu về một câu trả lời.
Nhưng khi bạn suy nghĩ trả lời, bạn sẽ thu về gấp bội!
Lưu ý: Các trường hợp cố tình spam câu trả lời hoặc bị báo xấu trên 5 lần sẽ bị khóa tài khoản
Các câu hỏi mới
-
01/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
02/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
02/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
02/12/2022 | 1 Trả lời
-
02/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
02/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
02/12/2022 | 1 Trả lời
-
01/12/2022 | 1 Trả lời
-
A. Ubuntu.
B. BKAV.
C. Kapersky.
D. Antivirus.
01/12/2022 | 2 Trả lời
-
A. Worm, sâu máy tính
B. Trojan
C. Virus
D. BKAV.
19/12/2022 | 1 Trả lời
-
Nhập vào danh sách b với n phần tử số nguyên. Hãy tính tổng các phần tử lẻ trong b
17/02/2023 | 0 Trả lời
-
Khi đó vòng biểu diễn bởi một xâu S gồm N ký tự trong tập ['1'...'9']. Để tăng tính độc đáo cho vòng trang sức quý này, người ta lắp khóa đẹp vào vị trí sao cho khi mở vòng ra được một dãy đá quý có tính chất không phụ thuộc vào việc cầm đầu dây này bên tay phải dầu kia bên tay trái hay ngược lại ta đều được chuỗi giống nhau tức là viên đá thứ i từ trái sang luôn có màu gì không phụ thuộc vào cách cầm Hãy đếm số cách đặt khóa
Ví dụ: xâu S: 222222335533
+222334433222
+533222222335
Viết chương trình trong python
03/04/2023 | 0 Trả lời
-
In và đếm các số nguyên tố có trong danh sách
05/04/2023 | 0 Trả lời
-
Cho a là 1 danh sách chỉ gồm các số nguyên. Hãy viết chương trình tạo và in ra dsach b chỉ gồm các số chẵn trong a?
05/04/2023 | 0 Trả lời
-
a. Đếm và thông báo số từ trong xâu đó
b. Thông báo ra màn hình từ đầu tiên của xâu
25/04/2023 | 0 Trả lời