.1 Biểu đồ hoạt động chức năng tìm đường đi ngắn nhất

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số vấn đề về mạng lưới trong cơ sở dữ liệu không gian Luận văn ThS. Công nghệ thông tin 60 48 05 (Trang 66 - 70)

[Có] [Có]

[Không]

[Không]

Hiển thị đường đi ngắn nhất trên

bản đồ

Thông báo “Không tồn tại đường đi giữa hai

điểm đó” Tìm kiếm ? (C/K) [Nhập trực tiếp] Lựa chọn tìm kiếm Nhập - Điểm xuất phát - Điểm đến Kích chọn - Điểm xuất phát - Điểm đến

Tìm đường đi giữa hai điểm có khoảng

cách ngắn nhất

Liệt kê các đường đi có cùng khoảng

cách ngắn nhất

3.6 Cài đặt và th nghim chương trình

3.6.1 Cài đặt

Chương trình được phát triển bằng cách sử dụng công cụ MapXtreme v6.6 nhúng trong môi trường Visual C# . NET.

Chương trình chạy trên hệ điều hành Window XP. Máy tính tốc độ

1,73 GHz, bộ nhớ 512MB RAM.

3.6.2 K thut áp dng

™ Hiển thị bản đồ:

- Sử dụng phần mềm hỗ trợ MapXtreme v6.6 để hiển thị bản đồ mạng lưới tuyến xe buýt Hà Nội từ hai bảng cơ sở dữ liệu định dạng MapInfo. Hai bảng dữ liệu này tạo thành hai lớp bản đồ:

+ Tập tin Diem_chuyen.TAB: là lớp Diem_chuyen, hiển thị các hình tròn màu vàng, biểu diễn cho các điểm dừng xe buýt.

+ Tập tin Xe_buyt.TAB: lớp Xe_buyt, hiển thị các đường màu nâu nối các điểm, biểu diễn cho các tuyến xe buýt.

™ Cách chuyển đổi dữ liệu vào chương trình để xây dựng đồ thị

Từ dữ liệu cho trước theo định dạng MapInfo có thể xây dựng thành đồ

thị như sau:

- Các điểm dừng xe buýt (tương ứng với bảng dữ liệu Diem_chuyen) là tập các điểm của đồ thị. Các điểm này có tọa độ và có các thuộc tính như số thứ

tự và tên của từng điểm dừng xe buýt.

- Để xây dựng các cạnh đồ thị, tức là đường nối hai điểm xe buýt liền kề

thì có thể xây dựng một bảng cơ sở dữ liệu Access (bảng Duong_Xe) trong đó thuộc tính Khoang_cach biểu diễn độ dài khoảng cách hai điểm liền kề trong đồ

thị, tức là khoảng cách hai điểm xe buýt gần kề trong cùng tuyến xe buýt.

Đoạn mã xây dựng đồ thị như sau:

private void khoiTaoDoThi()

{

for(int i =0; i < danhSachDiem.Length;i++) for (int j = 0; j < danhSachDiem.Length; j++) {

if (DoThi[i, j] == null) {

DoThi[i,j]=new clsKhoangCach(danhSachDiem[i],danhSachDiem[j]); }

DoThi[i,j]=khoiTaoKhoangCach(danhSachDiem[i],danhSachDiem[j]); }

}

Trong đó, các biến được khai báo như sau:

clsBenXe[] danhSachDiem;

clsKhoangCach[,] DoThi;// chua khoang cach cac dinh Trong đó, lớp clsKhoangcach được định nghĩa như sau:

class clsKhoangCach

{

public static float MaxValue =float.MaxValue;

clsBenXe diemNguon;

clsBenXe diemDich;

public string tuyenXe;

public float doDai;

public clsKhoangCach(clsBenXe diemDau, clsBenXe diemCuoi) { diemNguon = diemDau; diemDich = diemCuoi; doDai = MaxValue; } }

Lớp clsBenxe được định nghĩa như sau:

class clsBenXe

{

public string ten;// Tên bến xe

public string tuyen;// các tuyến xe đi qua public bool isKiemTra;

public int thuTu; // thu tu cua diem trong danh sach

public int ID; // id cua ben xe trong csdl bang diem_chuyen public clsBenXe diemTruoc;

public clsBenXe() { ID = -1; ten = ""; tuyen = ""; isKiemTra = false; } }

™ Áp dụng thuật toán tìm đường đi vào đồ thị

Đây là đoạn mã lệnh áp dụng thuật toán tìm đường đi Dijkstra đã được trình bày trong chương 2:

private void giaiThuatDijkstra(clsBenXe diemDau) {

for (int i = 0; i < danhSachDiem.Length; i++) {

danhSachDiem[i].isKiemTra = false; danhSachDiem[i].diemTruoc = diemDau; }

diemDau.isKiemTra = true;// dua vao tap set //diemDau.diemTruoc = diemDau; int SoDiemChuaXet = danhSachDiem.Length - 1; while (SoDiemChuaXet > 0)

{

// tim diem ngan nhat chua xet toi diemDau clsBenXe diemMin = new clsBenXe();

for (int i = 0; i < danhSachDiem.Length; i++) {

if (!danhSachDiem[i].isKiemTra) {

if (diemMin.ten == "") diemMin = danhSachDiem[i]; if (DoThi[diemDau.thuTu,i].doDai < DoThi[diemDau.thuTu,diemMin.thuTu].doDai) { diemMin = danhSachDiem[i]; } } } diemMin.isKiemTra = true; SoDiemChuaXet--;

for (int i = 0; i < danhSachDiem.Length; i++) {

if((!danhSachDiem[i].isKiemTra)&&(DoThi[diemDau.thuTu,i].doDai > DoThi[diemDau.thuTu,diemMin.thuTu].doDai +

DoThi[diemMin.thuTu,i].doDai)) {

DoThi[diemDau.thuTu, i].doDai = DoThi[diemDau.thuTu, diemMin.thuTu].doDai + DoThi[diemMin.thuTu, i].doDai; danhSachDiem[i].diemTruoc = diemMin; DoThi[diemDau.thuTu, i].tuyenXe = DoThi[diemMin.thuTu, i].tuyenXe; } } } }

3.6.3 Các kết qu th nghim

3.6.3.1 Kết quả bước đầu

Chương trình “Tìm kiếm đường đi ngắn nhất giữa hai điểm xe buýt trong mạng lưới tuyến xe buýt Hà Nội” chạy trên môi trường WinXP khá ổn định.

™ Giao diện chính của chương trình (hình 3.2)

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Một số vấn đề về mạng lưới trong cơ sở dữ liệu không gian Luận văn ThS. Công nghệ thông tin 60 48 05 (Trang 66 - 70)

Tải bản đầy đủ (PDF)

(91 trang)