Việc nghiên cứu thuật toán Floyd để áp dụng vào trong thực tế là rất quan trọng với nhiều tiện lợi cho con người cả về vật chất, của cải lẫn thời gian. Giúp ích rất nhiều cho con người trong việc nâng cao hiệu quả làm việc và làm tăng năng suất lao động, tăng thu nhập cho doanh nghiệp. Qua đây chính là việc áp dụng cho Tài xế Taxi để tìm đường đi ngắn nhất trong các tuyến đường giao thông đồng thời tiết kiệm được chi phí về nhiên liệu, thời gian và làm tăng thu nhập cho mình cũng như công ty.
Trang 1Chương 2: MÔ TẢ ỨNG DỤNG VÀ GIẢI THÍCH ỨNG DỤNG
CỦA THUẬT TOÁN FLOYD
1 Mô tả ứng dụng
Việc nghiên cứu thuật toán Floyd để áp dụng vào trong thực tế là rất quan trọng với nhiều tiện lợi cho con người cả về vật chất, của cải lẫn thời gian Giúp ích rất nhiều cho con người trong việc nâng cao hiệu quả làm việc và làm tăng năng suất lao động, tăng thu nhập cho doanh nghiệp
Qua đây chính là việc áp dụng cho Tài xế Taxi để tìm đường đi ngắn nhất trong các tuyến đường giao thông đồng thời tiết kiệm được chi phí về nhiên liệu, thời gian và làm tăng thu nhập cho mình cũng như công ty
2 Mô tả và giải thích ứng dụng của thuật toán Floyd
Phạm vi áp dụng của thuật toán là Thành Phố Hồ Chí Minh Ta xem mõi Quận của Tp.HCM là một đỉnh của đồ thị và các con đường đi từ Quận này sang Quận kia là đường nối giữa các đỉnh với nhau Ở đây ta xem đường nối giữa các Quận là đường 2 chiều
Lúc đầu ta quản lý một tập hợp động ma trận S đỉnh v và cạnh u (các Quận trong Tp.HCM là v và đường đi giữa chúng chính là u) với mỗi đỉnh v, chúng ta quản lý một d[v] là đường đi ngắn nhất trong các đường đi nối hai Quận bất kỳ của đồ thị
Ta chỉ xét 13 quận của Tp.HCM là : Quận 12, Quận Tân Phú, Quận Bình Tân, Quận 6, Quận 5, Quận 4, Quận 2, Quận Bình Thạnh, Quận Gò Vấp, Quận Tân Bình, Quận 10, Quận 11 và Chợ Bến Thành
Ta cho đường đi giữa các quận được tính bằng km như sau:
GVHD : Trần Quang Hà trang1
Trang 2TÂN
PHÚ
12
11
BÌNH
TÂN
5
2
TÂN BÌNH
10 THÀNH BẾN
GÒ VẤP
BÌNH THẠN H
4
6
Trang 31 Quận 12
2 Quận Tân Phú
3 Quận Bình Tân
4 Quận 6
5 Quận 5
6 Quận 4
7 Quận 2
8 Quận Bình Thạnh
9 Quận Gò Vấp
10 Quận Tân Bình
11 Quận 11
12 Quận 10
13 Chợ Bến Thành
GVHD : Trần Quang Hà trang 3
Trang 4MA TRẬN
13
0 1 0 0 0 0 0 0 1 2 0 0 0
1 0 2 0 0 0 0 0 0 2 0 0 0
0 2 0 1 0 0 0 0 0 0 1 0 0
0 0 1 0 4 0 0 0 0 0 2 0 0
0 0 0 4 0 2 0 0 0 0 0 3 0
0 0 0 0 2 0 4 0 0 0 0 0 1
0 0 0 0 0 4 0 3 0 0 0 0 1
0 0 0 0 0 0 3 0 2 0 0 0 1
1 0 0 0 0 0 0 2 0 3 0 0 0
2 2 0 0 0 0 0 0 3 0 5 4 2
0 0 1 2 0 0 0 0 0 5 0 1 0
0 0 0 0 3 0 0 0 0 4 1 0 0
0 0 0 0 1 1 1 1 0 2 0 4 0
THUẬT TOÁN FLOYD ÁP DỤNG CHO TÀI XẾ TAXI Ở THÀNH PHỐ
HỒ CHÍ MINH
#include<stdio.h>
#include<conio.h>
#include <math.h>
#define MAX 50
#define VOCUC 1000
int T[MAX][MAX],L[MAX][MAX],P[MAX][MAX];
Trang 5int n,u,v,k;
void LoadFile()
{
FILE *f; int i,j;
f=fopen ("G:\\4.txt","r");
fscanf(f,"%d",&n);
printf("\nSo dinh cua do thi: %d",n);
printf("\nMa tran trong so: ");
for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=n;j++) {
fscanf(f,"%d",&T[i][j]);
printf("%3d",T[i][j]);
if((i!=j) && (T[i][j]==0))
T[i][j]=VOCUC;
} }
fclose(f);
GVHD : Trần Quang Hà trang
5
Trang 6void Floy()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
L[i][j]=T[i][j];
if((i==j) || (L[i][j]==VOCUC))
P[i][j]=0;
else
Trang 7}
}
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) {
if(L[i][j]>(L[i][k]+L[k][j])) {
L[i][j]=L[i][k]+L[k][j];
P[i][j]=P[i][k];
} }
}
}
}
GVHD : Trần Quang Hà trang
7
Trang 8VÍ DỤ CHO THUẬT TOÁN FLOYD
Ví dụ:
0 0 3 0 0
Tai i=1
J=1
Gán L[1][1]=T[1][1]
Vi 1=1 nen ta gan P[1][1]=0
Tang j=2
Gan L[1][2] = T[1][2]
Vi 1 khac 2 nen ta thuc hienj cau lenh else
Gan P[1][2]=2
Tang j=3
Gan L[1][3]=T[1][3]
Vi 1 khac 3 va T[1][3] khong bang vo cung nen thuc hien cau lenh else
Gan p[1][3]=3
Tang j=4
Gan L[1][4]=T[1][4]
Vi L[1][4]=vo cuc
Nen gan P[1][4]=0
Tang j=5
Gan L[1][5]=T[1][5]
Vi L[1][5] = vo cuc nen
Gan P[1][5]=0
Tuong tu tang i=2
Ta co:
Trang 9P[2][2]=0
P[2][3]=3
P[2][4]=0
P[2][5]=0
Tang i=3 P[3][1]=0 P[3][2]=2 P[3][3]=0 P[3][4]=3 P[3][5]=0
Tang i=4 P[4][1]=1 P[4][2]=0 P[4][3]=3 P[4][4]=0 P[4][5]=5
Tang i=5 P[5][1]=0 P[5][2]=0 P[5][3]=3 P[5][4]=0 P[5][5]=0 Chay xong dong for nay ta duoc ma tran L va P
1000 1000 3 1000 0
0 2 3 0 0
2 0 3 0 0
0 2 0 4 0
1 0 3 0 5
0 0 3 0 0
LIENHE\void Floy.doc
Sau khi tìm được ma trận P2 ta tìm được ma trận L2
LIENHE\RESUML.doc
Chạy vòng lặp for tương tự ta tìm được các ma trận
L2,P2,L3,P3,L4,P4,L5,P5
for(k=1;k<=2;k++)
GVHD : Trần Quang Hà trang
9
Trang 10for(k=1;k<=3;k++)
Trang 11for(k=1;k<=n;k++)
GVHD : Trần Quang Hà
trang
11
Trang 12ĐÂY LÀ KẾT QUẢ CUỐI CÙNG CỦA VÒNG LẶP:LIENHE\for.doc
Vào hàm Floy: chương trình chạy ta được kết quả như sau: ( ví dụ tìm
đường đi ngắn nhát từ đỉnh 5 đến đỉnh 2)
Trang 13GVHD : Trần Quang Hà
trang
13