Tìm Hiểu Và Cài Đặt Thuật Toán GTS

17 4.1K 6
Tìm Hiểu Và Cài Đặt Thuật Toán GTS

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

1) Mô tả bài toán. 2) Giải thuật GTS1 và GTS2. 3) ma trận hóa dữ liệu đồ thị. 4) cấu trúc dữ liệu đề nghị. 5) cài đặt thuật toán trên C#

Đề tài số 5 1 GVHD: Lư Nhật Vinh MỤC LỤC BÀI TOÁN GTS1 I. Mô tả bài toán Một người du lịch dự định tham quan quốc gia ABC. Anh ta dự kiến sẽ đến N thành phố. Chi phí để di chuyển từ thành phố i tới thành phố j là M[i][j]. Bạn hãy tum một lộ trunh để người du lịch này có thể xuất phát từ thành phố (từ skn bay chẳng hạn) đi đến các thành phố cần tham quan quay về địa điểm ban đầu, mỗi điểm tham quan chỉ qua 1 lần, sao cho chi phí là ít nhất. Ví dụ: Tìm Hiểu Cài Đặt Thuật Toán GTS Đề tài số5 2 GVHD:Lư Nhật Vinh C ∞ 1 2 7 5 1 ∞ 4 4 3 = 2 4 ∞ 1 2 7 4 1 ∞ 3 5 3 2 3 ∞ II. Ma trận hóa dữ liệu đồ thị Giả sử ta có đồ thị gồm N đỉnh. Ma trận biểu diễn cho đồ thị là ma trận có kích thước N × N, với N là số đỉnh của đồ thị. Mỗi phần tử M[i][j] biểu diễn thông tin của cạnh nối đỉnh i đỉnh j. (1≤ i, j ≤ N). Trong bài toán GTS1, ta cần biểu diễn chi phí di chuyển giữa các thành phố. Do đó, ma trận sẽ có những đặc điểm sau:  Kích thước N × N, với N là số thành phố.  M[i][j] = chi phí di chuyển giữa thành Đề tài số5 3 GVHD:Lư Nhật Vinh ph ố i j. o N ế u t ồ n t ạ i đ ư ờ n g đ i g i ữ a i j thì M[i][j] = x (x là giá trị xác định). o Ngược lại, M[i] [j] = ∞. (khi cài đặt phải tum giá trị thích hợp cho ∞) Mọi thành phố không có đường đi đến chính nó. III.Giải thuật GTS1  Bước 1: Khởi tạo TOUR:= , COST:= 0; v:= u (u là đỉnh bắt đầu)  Bước 2: Thăm tất cả các thành phố( cho k chạy từ 1 đến n-1). Chọn (v, w) là cạnh có chi phí nhỏ nhất tính từ v đến các đỉnh chưa sử dụng w. Gán TOUR: = TOUR + (v, w); COST: = COST + C(v, w); Khi đó, đỉnh w được sử dụng. Gán v:= w Trong khi chưa đủ N thành phố, lặp lại Bước 2.  Bước 3: Chuyến đi hoàn thành. Gán TOUR: = TOUR + (v, u); COST: = COST + C(v, u); Chấm dứt thuật giải. IV. Cấu trúc dữ liệu đề nghị int[MAX,MAX] Matrix; char[MAX] Visited; char[MAX] TOUR; int COST; int nCities; Diễn giải  Matrix: ma trận chi phí di chuyển giữa các thành phố, M[i][j]: chi phí di chuyển từ thành phố i đến thành phố j. Visited: mảng cho biết tunh trạng thăm viếng của các thành phố o Visited[i] = 0: thành phố thứ i chưa được tham quan o Visited[i] = 1: thành phố thứ i đã được tham quan  TOUR: mảng chứa chu trunh tham quan  COST: chi phí tham quan  nCities: số thành phố V. Cài đặt Void KhoiTaoMaTran(char *filename) { Đọc ma trận chi phí từ file } Void GTS1(int u) { Khởi tạo mảng thăm viếng Lịch trình ban đầu chỉ có đỉnh u TOUR[0] = u; Visited[u] = 1; số thjnh phố đã qua = 1; Đặt đỉnh đang xét là v, v = u; Chi phí ban đầu COST = 0; while (số thành phố đã qua < số thành phố) { Đặt min = -1; Duyệt tất cả các thành phố j Nếu có đường đi giữa v j && chưa tham quan j Nếu min = -1 hoặc đường đi (v, j) < min min = Matrix[v][j]; w = j; Nếu không tìm được min nào như thế Bài toán không có lời giải, dừng thuật giải COST = COST + min; TOUR[nCount++] = w; Visited[w] = 1; v = w; } Nếu số thành phố đã qua bằng nCities có đường đi giữa v u COST = COST + Matrix[v][u]; TOUR[nCities] = u; Thuật giải kết thúc Ngược lại, bài toán không có lời giải, dừng thuật giải } BÀI TOÁN GTS2 I. Giải thuật GTS2 Giải thuật này sẽ tạo ra các lịch trình từ P thành phố xuất phát riêng biệt cho bài toán tìm chu trinh đi qua N thành phố (GTS1) như đã nói ở trên, với 1 ≤ P ≤ N. Khi đó P chu trình được tạo ra một cách tuần tự chỉ có chu trình tốt nhất đã tìm thấy được giữ lại mà thôi.  Bước 1: Khởi tạo K:=0; BEST:= , COST:= ∞;  Bước 2: Lần lượt tạo ra P chu trình với đỉnh thứ K Call(GTS1(v K )).  Bước 3: Cập nhật chu trunh tốt nhất Nếu C (K) < COST thì gán BEST:= T(K); (chu trunh xuất phát từ K) COST:= C(K);  Bước 4: Nếu K ≤ P, lặp lại bước 2. Ngược lại, chấm dứt thuật giải. II. Cấu trúc dữ liệu đề nghị int[MAX,MAX] Matrix; int nCities; char[MAX] BEST; int COST; Diễn giải  Matrix: ma trận chi phí di chuyển giữa các thành phố, M[i][j]: chi phí di chuyển từ thành phố i đến thành phố j.  nCities: số thành phố  BEST: mảng chứa chu trunh tham quan tốt nhất  COST: chi phí nhỏ nhất III.Cài đặt void GTS2(int P) { Đặt chi phí nhỏ nhất ban đầu COST = ∞; (∞ = giá trị lớn nhất có thể có) for (int k = 0; k < P; k++) { Tính GTS1(k) Nếu COST ≠ ∞ hoặc C(k) < COST Gán COST = C(k); Ghi nhớ T(K) làm chu trình tốt nhất hiện tại, BEST ← T(K) } } } IV. Ví dụ minh họa: GTS1 a. Tìm hành trình tôt nhất chi phí tương ứng theo thuật giải GTS1 với đỉnh xuất phát =1. Bước 1. TOUR ={} COST =0 V=1// đỉnh xuất phát Bước 2: Chọn w = 5// đỉnh được chọn vì có chi phí thấp nhất TOUR={1,5} COS T = 0 +2 V=5 VI. Code cài đặt [...]...CÀI ĐẶT THUẬT TOÁN GTS TRÊN C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace DemoGTS { public class GTS { int MAX= 10; int[,] a;//khai báo ma trận a int n,kt=0;//kb số pt n biến lấy phần tử cuối cùng của dường đi public int cost = 0;//luu... di++)//gán các giá trị mặc định cho mảng LuuVet ,và ChuaXet { LuuVet[di] = "-1,-1"; ChuaXet[di] = 0; } dem = 0;//gán biến đếm =0 cost = 0;//gán đường đi=0//dem cost là 2 biến sử dụng trên hàm GTS( )nên mỗi lần gọi lại GTS ta gan nó =0 GTS1 (i, a, n);//gọi hàm GTS( ) cost += a[kt, i];//tính giá trị dường đi Console.WriteLine("{0}", cost);///in ra giá trị dường đi chỉ demo thử if (Best > cost && cost != 0 && dem... V=1(đã được xét) int i=0; int k= timmin(a,v);//gọi lại hàm tìm min for (i = 0; i < n; i++) { if (a[v,i]==k && a[v,i]!=0 && ChuaXet[i]==0)//kiếm tra { LuuVet[dem] = "("+v+","+i+")";///lưu dường đi cost += a[v,i];//cộng các trong số của cạnh thỏa mãn dem++;//đém số số đỉnh đã duyệt kt = i;//lấy vị đỉnh cuối cùng được duyệt GTS1 (i, a, n);//gọi lại GTS với đỉnh tiếp theo là i } } LuuVet[dem + 1] = "(" + kt+... ")";//lưu dường đi từ đinh cuối đến đỉnh đầu } public void GTS2 (int[,] a, int n) { int i; ChuaXet = new int[MAX];//khởi tạo mang chưa xét LuuVet = new string[MAX];//khởi tạo mảng chứa dường đi Luu = new string[MAX];//khởi tạo mảng chứa dường đi tốt nhất for (i = 0; i < n; i++) { for (int di = 0; di < MAX; di++)//gán các giá trị mặc định cho mảng LuuVet ,và ChuaXet { LuuVet[di] = "-1,-1"; ChuaXet[di] = 0; }... Console.WriteLine("\n"); } } int timmin(int[,] u,int v)//hàm này dùng để tìm giá trị nhỏ nhất trong mảng { int min=10000000;//vì giá trị nhỏ nhất ở đây có thể trùng với vị trí mà đỉnh đã dk xét nên chọn 1 giá trị lớn nhất có thể for (int j = 0; j < n; j++) { if (j != v && ChuaXet[j] == 0) { if (min > u[v, j]) min = u[v, j]; } } return min; } public void GTS1 (int v, int[,] a, int n) { ChuaXet[v] = 1;//chọn đỉnh v... FileStream(filename, FileMode.Open, FileAccess.Read);//đọc file StreamReader reader = new StreamReader(input); string stri; while ((stri = reader.ReadLine()) != null) { st += stri;//cộng dồn chuỗi đọc vào st } Console.WriteLine(st); string[] s = st.Split(' ');//cắt chuỗi int t = Convert.ToInt32(s[0].ToString());//lấy số đỉnh của đồ thị trong file n = t;//gán n=t(có thề đưa n thay chỗ của t) int count... - 1)//so sánh nếu giá trị dường đi tốt nhất Best mà lớn hon7gia1 trị đường đi Cost vửa tính { Best = cost; //thỏa dk gán Best=Cost for (int c = 0; c . = 0;//gán đường đi=0//dem và cost là 2 biến sử dụng trên hàm GTS( )nên mỗi lần gọi lại GTS ta gan nó =0 GTS1 (i, a, n);//gọi hàm GTS( ) cost += a[kt, i];//tính giá trị dường đi Console.WriteLine("{0}",. THUẬT TOÁN GTS TRÊN C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace DemoGTS { public class GTS { . duyệt GTS1 (i, a, n);//gọi lại GTS với đỉnh tiếp theo là i } } LuuVet[dem + 1] = "(" + kt+ "," + v + ")";//lưu dường đi từ đinh cuối đến đỉnh đầu } public void GTS2 (int[,]

Ngày đăng: 05/06/2014, 17:18

Từ khóa liên quan

Mục lục

  • BÀI TOÁN GTS1

    • I. Mô tả bài toán

    • II. Ma trận hóa dữ liệu đồ thị

    • III. Giải thuật GTS1

    • IV. Cấu trúc dữ liệu đề nghị

    • V. Cài đặt

    • BÀI TOÁN GTS2

      • I. Giải thuật GTS2

      • II. Cấu trúc dữ liệu đề nghị

      • III. Cài đặt

      • CÀI ĐẶT THUẬT TOÁN GTS TRÊN C#

Tài liệu cùng người dùng

Tài liệu liên quan