Professional Documents
Culture Documents
CTRR
CTRR
nhất từ một đỉnh xuất phát đến tất cả các đỉnh còn lại trong đồ thị. Dưới đây là giải thích chi tiết từng
bước:
cppCopy code
dist[start] = 0 ;
Mảng dist lưu trữ khoảng cách từ đỉnh xuất phát đến các đỉnh khác. Ban đầu, tất cả các giá trị khoảng
cách được đặt là INT_MAX để biểu diễn rằng chưa có đường đi nào được tìm thấy.
Khoảng cách từ đỉnh xuất phát đến chính nó là 0, nên dist[start] được đặt là 0.
cppCopy code
{ Node* temp = graph->adjList[v]; while (temp != NULL ) { int u = v; int w = temp->data; int weight = 1 ; //
Trọng số cạnh, có thể thay đổi tùy thuộc vào yêu cầu if (dist[u] != INT_MAX && dist[u] + weight < dist[w])
dist[w] = dist[u] + weight; temp = temp->next; } } }
Hai vòng lặp lồng nhau được sử dụng để cập nhật khoảng cách dist từ đỉnh xuất phát đến các đỉnh
khác.
Dòng lặp ngoài cùng chạy V - 1 lần (với V là số đỉnh trong đồ thị), là số lần tối đa cần để đảm bảo
rằng tất cả các đỉnh đã được cập nhật.
Trong vòng lặp ngoài cùng, vòng lặp trong cùng lặp qua tất cả các đỉnh của đồ thị ( v là đỉnh nguồn).
Vòng lặp trong cùng bên trong lặp qua tất cả các cạnh nối từ đỉnh v (đỉnh nguồn) đến các đỉnh khác ( w
là đỉnh đích).
Nếu khoảng cách từ đỉnh xuất phát đến u (đỉnh nguồn của cạnh) không phải là vô cùng ( INT_MAX) và
việc thêm trọng số của cạnh không vượt quá khoảng cách hiện tại từ đỉnh xuất phát đến w, thì cập nhật
dist[w] với giá trị mới.
cppCopy code
printf ( "Duong di ngan nhat tu dinh %d:\n" , start); for ( int i = 0 ; i < graph->V; i++) printf ( "dinh %d: %d\n" , i,
dist[i]);
Cuối cùng, hàm in ra màn hình khoảng cách ngắn nhất từ đỉnh xuất phát đến tất cả các đỉnh trong đồ thị.
cppCopy code
free (dist);
Sau khi sử dụng xong, bộ nhớ được cấp phát cho mảng dist được giải phóng.
Lưu ý rằng trọng số của cạnh được đặt là 1 trong ví dụ này, và bạn có thể điều chỉnh giá trị này tùy thuộc
vào yêu cầu cụ thể của đồ án.
You
ChatGPT
ChatGPT
luaCopy code
0 -- 1 | / | | / | 2 -- 3
0-1
0-2
1-2
1-3
2-3
Nếu bạn áp dụng thuật toán Ford-Bellman từ đỉnh 0, bạn sẽ có kết quả như sau:
Sau bước 3, không còn sự thay đổi nào trong mảng dist. Điều này có nghĩa là bạn đã tìm được đường
đi ngắn nhất từ đỉnh 0 đến tất cả các đỉnh khác trong đồ thị.
Như vậy, đường đi từ đỉnh 0 đến đỉnh 2 có chiều dài là 2, và đường đi này đi qua các đỉnh theo thứ tự 0 -
> 1 -> 2.