Tải bản đầy đủ (.doc) (12 trang)

MÔ TẢ ỨNG DỤNG VÀ GIẢI THÍCH ỨNG DỤNG CỦA THUẬT TOÁN FLOYD

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (236.88 KB, 12 trang )

Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
Chươ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à trang
1
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
1. 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
2
TÂN
PHÚ
12
11
BÌNH
TÂN
5
2
TÂN
BÌNH
10
BẾN
THÀNH

VẤP
BÌNH
THẠN
H

4
6
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
MA 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];
GVHD : Trần Quang Hà trang
3
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
int 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
4
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
}
void 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
GVHD : Trần Quang Hà trang
5
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
P[i][j]=j;
}
}
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
6
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
VÍ DỤ CHO THUẬT TOÁN FLOYD
Ví dụ:

0 1 5 0 0
2 0 3 0 0
0 2 0 1 0
-2 0 2 0 2
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:
P[2][1]=2
P[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
GVHD : Trần Quang Hà trang
7
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
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
0 1 5 1000 1000
2 0 3 1000 1000
1000 2 0 1 1000
-2 0 2 0 2
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
8
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
for(k=1;k<=3;k++)
for(k=1;k<=4;k++)
GVHD : Trần Quang Hà trang
9
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
for(k=1;k<=n;k++)
GVHD : Trần Quang Hà trang
10
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
ĐÂ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)
GVHD : Trần Quang Hà trang
11
Trường Đại Học Trà Vinh Khoa Kỹ Thuật Công Nghệ
GVHD : Trần Quang Hà trang
12

×