do an thuật toán tìm đường đi ngắn nhất trong do thi

25
 Đán cơ sGVHD: Đoàn Văn Thng  LI NÓI ĐẦU Lý thuyết đồ thlà mt lĩnh vc nghiên cu đã có tlâu đờivà có nhiu ng dng hin đại.Nhng tư tưởng cơ bn ca lý thuyết đồ thđươc đề xut tnhng năm đầu ca thế k18 bi nhà toán hc li lc người Thy Sĩ Leonhard Euler.Chính ông là người đã sdng đồ thđể gii bài toán ni tiếng vcác cái cu thàng phKonigsberg. Đồ thđược sdng để gii quyết các bài toán trong nhiu lĩnh vc khác nhau .Chng hn , đồ thcó thsdng để xác định các mch vòng trong vn đề gii tích mch đin.Chúng ta có thphân bit các hp cht hoá hc hu cơ khác nhau vi cùng công thc phân tnhưng khác nhau vcu trúc phân tnhđồ th.Chúng ta có thxác định xem hai máy tính trong mng có thtrao đổi thông tin được vi nhau hay không nhmô hình đồ thca mng máy tính.  Đồ thcó trng strên các cnh có thsdng để gii các bài toán như : tìm đường đi ngn nht gia hai thành phtrong cùng mt mng giao thông . Chúng ta còn sdng đồ thđể gii các bài toán vlp lch,thi khoá biu,và phân btn scho các trm phát thanh và truyn hình.... Mc đích ta tìm hiu là nhm gii thiu các khái nim cơ bn,các bài toán ng dng quan trng ca lý thuyết đồ thnhư bài toán cây khung nhnht , bài toán tìm đường đi ngn nht... và nhng thut toán để gii quyết chúng đã được trình bày chi tiết cùng vi vic phân tích và hướng dn cài đặt chương trình trên máy tính. Cng cvà rèn luyn knăng lp trình, nhli các thut toán mà đặc bit là thut toán Dijkstra. Chương 1 : Lý thuyết vthut toán tìm đường đi ngn nht. Chương 2 : Xây dng thut toán. Chương 3 : Cài đặt thut toán.  SVTH : Nguyn Công Hiếu_SBD 0041 - Trang 1 -

Transcript of do an thuật toán tìm đường đi ngắn nhất trong do thi

Page 1: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 1/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

LỜI NÓI ĐẦU

Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu đờivà có nhiều

ứng dụng hiện đại.Những tư tưởng cơ bản của lý thuyết đồ thị đươc đề xuất từnhững năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sĩ LeonhardEuler.Chính ông là người đã sử dụng đồ thị để giải bài toán nổi tiếng về các cáicầu ở thàng phố Konigsberg.

Đồ thị được sử dụng để giải quyết các bài toán trong nhiều lĩnh vực khácnhau .Chẳng hạn , đồ thị có thể sử dụng để xác định các mạch vòng trong vấn đềgiải tích mạch điện.Chúng ta có thể phân biệt các hợp chất hoá học hữu cơ khácnhau với cùng công thức phân tử nhưng khác nhau về cấu trúc phân tử nhờ đồthị.Chúng ta có thể xác định xem hai máy tính trong mạng có thể trao đổi thông tinđược với nhau hay không nhờ mô hình đồ thị của mạng máy tính. Đồ thị có trọng

số trên các cạnh có thể sử dụng để giải các bài toán như : tìm đường đi ngắn nhấtgiữa hai thành phố trong cùng một mạng giao thông . Chúng ta còn sử dụng đồ thịđể giải các bài toán về lập lịch,thời khoá biểu,và phân bố tần số cho các trạm phátthanh và truyền hình....

Mục đích ta tìm hiểu là nhằm giới thiệu các khái niệm cơ bản,các bài toánứng dụng quan trọng của lý thuyết đồ thị như bài toán cây khung nhỏ nhất , bàitoán tìm đường đi ngắn nhất... và những thuật toán để giải quyết chúng đã đượctrình bày chi tiết cùng với việc phân tích và hướng dẫn cài đặt chương trình trênmáy tính.

Củng cố và rèn luyện kỹ năng lập trình, nhớ lại các thuật toán mà đặc biệt

là thuật toán Dijkstra.Chương 1 : Lý thuyết về thuật toán tìm đường đi ngắn nhất.Chương 2 : Xây dựng thuật toán.Chương 3 : Cài đặt thuật toán.

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 1 -

Page 2: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 2/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Chương I : LÝ THUYẾT VỀ THUẬT TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT

I.1 Các khái niệm cơ bản của lý thuyết đồ thịI.1.1  Định nghĩa đồ thịĐồ thị là một cấu trúc rời rạc bao gồm các đỉnh và các cạnh nối các

đỉnh này.Chúng ta phân biệt các loại đồ thị khác nhau bởi kiểu và số lượngcạnh nối hai đỉnh nào đó của đồ thị . Để có thể hình dung được tại sao lạicần đếncác loại đồ thị khác nhau ,chúng ta sẽ nêu ví dụ sử dụng chúng để mô tảmột mạng máy tính .Giả sử ta có một mạng gồm các máy tính và các kênhđiện thoại(gọi tắt là tên thoại) nối các máy tính này.Chúng ta có thể biểudiễn các vị trí đặt máy tính bởi các điểm và các kênh thoại nối chúng bởicác đoạn nối,xem hình 1

Hà Tây Đồng NaiHuế An Giang

Hà Nội TPHCM Bình Định

Quãng NgãiPhú Yên Khánh Hòa

Hình 1.Sơ đồ mạng máy tính

 Nhận thấy rằng trong mạng hình 1, giữa hai máy tính bất kỳ chỉ cho phép nhiềunhất là một kênh thoại nối chúng,kênh thoại này cho phép liên lạc cả hai chiều vàkhông có máy tính nào lại được nối với chính nó.Sơ đồ mạng máy tính cho tronhhình 1 được gọi là đơn đồ thị vô hướng => ta đi đến định nghĩa sau:

Định nghĩa 1. Đơn đồ thị vô hướng G=(V,E) bao gồm V là tập đỉnh,và E là tậpcác cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh.

Trong trường hợp giữa hai máy tính nào đó thường xuyên phải truyền tải nhiềuthông tin người ta phải nối hai máy này bởi nhiều kênh thoại . Mạng với đa kênhthoại giữa các máy tính được cho trong hình 2.

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 2 -

Page 3: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 3/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Hà Tây Đồng Nai Huế An Giang

 Hà Nội HCM Bình Định

Quãng NgãiPhú Yên

Khánh HòaHình 2. Sơ đồ mạng máy tính với đa kênh thoại

Định nghĩa 2. Đa đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh , và E làhọ các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh .Haicạnh e1 va e2 được gọi là cạnh lặpnếu chúng cùng tương ứng với một cặp đỉnh.

Hà Tây Đồng Nai Huế An Giang

 Hà Nội TPHCM Bình Định

Quãng Ngãi Phú YênKhánh Hòa

Hình 3. Sơ đồ mạng máy tính với kênh thông báo.

Rõ ràng mỗi đơn đồ thị đều là đa đồ thị, nhưng không phải đa đồ thị nào cũng làđơn đồ thị, vì trong đa đồ thị có hai hay nhiều hơn cạnh nối một cặp đỉnh nào đó.Trong mạng máy tính có thể có những kênh thoại nối một máy tính nào đó với

chính nó(chẳng hạn với mục đích thông báo).Mạng như vậy được cho trong hình3.Như vậy đa đồ thị không thể mô tả được mạng như vậy, bởi vì có những khuyên(cạnh nối một đỉnh vói chính nó).Trong trường hợp này chúng ta cần sử dụng đếnkhái niệm giả đồ thị vô hướng, được định nghĩa như sau:

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 3 -

Page 4: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 4/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Định nghĩa 3. Giả đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh, và E làhọ các cặp không có thứ tự gồm hai phần tử (không nhất thiết phải khác nhau)của V gọi là các cạnh.Cạnh e được gọi là khuyến nếu có dạng e=(u,u).

Các kênh thoại trong mạng máy tính có thể chỉ cho phép truyền tin theo mộtchiều.Chẳng hạn trong hình 4 máy chủ ở Hà Nội chỉ có thể nhận tin từ các máy ở địa phương, có một số máy chỉ có thể gửi tin đi ,còn các kênh thoại cho phéptruyền tin theo cả hai chiều được thay thế bởi hai cạnh có hướng ngược chiềunhau.

Hà Tây Đồng Nai Huế An Giang

  Hà Nội TPHCM Bình Định

Phú YênKhánh Hòa

Hình 4. Mạng máy tính với các kênh thoại một chiềuTa đi đến định nghĩa sau:

Định nghĩa 4 . Đơn đồ thị có hướng G=(V,E)bao gồm V là tập các đỉnh, và E làtập các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung.

 Nếu trong mạng có thể có đa kênh thoại một chiều,ta sẽ phải sử dụng đến kháiniệm đa đồ thị có hướng:

Định nghĩa 5. Đa đồ thị có hướngG=(V,E) bao gồm V là tập các đỉnh,và E là họcác cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung.Hai cung e1

va e2 tương ứng với cùng một cặp đỉnh được gọi là cung lặp.

Trong các phần tiếp theo chủ yếu chúng ta sẽ làm việc với đơn đồ thị vô hướng vàđơn đồ thị có hướng.Vì vậy, để cho ngắn gọn , ta sẽ bỏ qua tính từ đơn mỗi khinhắc đến chúng.I.1.2. Các thuật ngữ cơ bản

Trong mục này chúng ta sẽ trình bày một số thuật ngữ cơ bản của lý thuyếtđồ thị.Trước tiên ,ta xét các thuật ngữ mô tả các đỉnh và cạnh của đồ thị vô hướng.

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 4 -

Page 5: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 5/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Định nghĩa 1. Hai đỉnh u va v của đồ thị có hướng G được gọi là kề nhau nếu(u,v) là cạnh của đồ thị G.Nếu e=(u,v) là cạnh của đồ thị thì ta nói cạnh này làcạnh liên thuộc với hai đỉnh u và v, hoặc cũng nói là cạnh e nối đỉnh u và đỉnh v,đồng thời các đỉnh u và v sẽ được gọi là các đỉnh đầu của cạnh (u,v).

Để có thể biết có bao nhiêu cạnh liên thuộc với một đỉnh , ta đưa vào định nghĩasau :

Định nghĩa 2. Ta gọi bậc của đỉnh v trong đồ thị vô hướnglà số cạnh liên thuộcvới nó ta sẽ kí hiệu là deg(v).

b c d 

a f e g

Hình 1. Đồ thị vô hướng

Thí dụ . Xét đồ thị cho trong hình 1, ta códeg(a)=1, deg(b)=4 , deg(c)=4 , deg(f)=3, deg(d)=1 ,deg(e)=3 , deg(g)=0.

Đỉnh bậc 0 gọi là đỉnh cô lập , đỉnh bậc 1 được gọi là đỉnh treo .Trong ví dụ trênđỉnh g là đỉnh cô lập, a và d là các đỉnh treo. Bậc của đỉnh có tính chất sau :

Định lý 1. Giả sử G=(V,E) là đồ thị vô hướng với m cạnh . Khi đó2m=∑ deg(v)v ∈ V

Chứng minh. Rõ ràng trong mỗi cạnh e=(u,v) được tính một lần trong deg(u) vàmột lần trong deg(v). Từ đó suy ra tổng tất cả các bậc của các đỉnh bằng hai lần

 số cạnh

Thí dụ 2. Đồ thị với n đỉnh và mỗi đỉnh có bậc là 6 có bao nhiêu cạnh ?Giải: Theo định lý 1,ta có 2m=6n.Từ đó suy ra số cạnh của đồ thị là 3n.

 Hệ quả. Trong đồ thị vô hướng,số đỉnh bậc lẻ(nghĩa là có bậc là số lẻ) là một sốchẵn.

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 5 -

Page 6: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 6/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Chứng minh. Thực vậy, gọi O và U tương ứng là tập đỉnh bậc lẻ và tập đỉnh bậcchẵn của đồ thị,ta có

2m=∑deg(v)= ∑deg(v)+ ∑deg(v)  v∈ V v∈ O   v∈ U

Do deg(v) là chẵnvới v là đỉnh trong U nên tổng thứ hai trong vế phải ở trên là số

chẵn.Từ đó suy ra tổng thứ nhất(chính là tổng bậc của các đỉnh bậc lẻ) cũng phảilà số chẵn, do tất cả các số hạng của nó là số lẻ, nên tổng này phải gồm một sốchẵn các số hạng.Vì vậy , số đỉnh bậclẻ phải là số chẵn.

Ta xét các thuật ngữ tương tự cho đồ thị có hướng.

Định nghĩa 3. Nếu e=(u,v) là cung của đồ thị có hướng G thì ta nói hai đỉnh u vàvlà kề nhau,và nói cung(u,v) nối đỉnh u với đỉnh v hoặc cũng nói cung này là đi rakhỏi đỉnh u và đi vào đỉnh v.  Đinh u (v) sẽ được gọi là đỉnh đầu (cuối) của cung (u,v).Tương tự như khái niệm bậc, đối với đồ thị có hướng ta có khái niệm bán bậc

ra(vào) của một đỉnh.

Định nghĩa 4.Ta gọi bán bậc ra (vào) của đỉnh v trong đồ thị có hướng là số cung của đồ thị đi ra khỏi nó (đi vào nó) và kí hiệu la deg +(v)(deg -(v)).

a b c

e d 

Hình 2. Đồ thị có hướng GThí dụ 3. Xét đồ thị cho trong hình 2. Ta có

deg-(a)=1, deg-(b)=2, deg-(c)=2, deg-(d)=2, deg-(e)=2.deg+(a)=3, deg+(b)=1 deg+(c)=1, deg+(d)=2, deg+(e)=2

Do mỗi cung (u,v) sẽ được tính một lần trong bán bậc vào của đỉnh v vàmột lần trong bán bậc ra của đỉnh u nên ta có

Định lý 2. Giả sử G=(V,E) là đò thị có hướng , khi đó∑d eg+(v)= ∑d eg-(v)=|E|

  v∈ V v∈ V

Rất nhiều tính chất của đồ thị có hướng không phụ thuộc vào hướng trên các cungcủa nó. Vì vậy, trong nhiều trường hợp sẽ thuận tiện hơn nếu ta bỏ qua hướng trên

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 6 -

Page 7: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 7/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

các cung của đồ thị. Đồ thị vô hướng thu được bằng cách bỏ qua hướng trên cáccung được gọi là đồ thị vô hướng tương ứng với đồ thị có hướng đã cho.

I.1.3. Định nghĩa đường đi, chu trình , đồ thị liên thông.

Định nghĩa 1.  Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyêndương, trên đồ thị vô hướng G=(V,E) là dãy

 xo , x1 , ... , xn-1 , xn

trong đó u=x0 , v=xn , ( xi , xi+1 ) ∈E , i= 0, 1, 2 ,..., n-1.

 Đường đi nói trên còn có thể biểu diễn dưới dạng các cạnh:(x0 , x1 ) , ( x1 , x2 ), ... , ( xn-1 , xn ).

 Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi cóđỉnh đầu trùng với đỉnh cuối ( tức là u=v) được gọi là chu trình. Đường đi haychu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại.

Thí dụ 1. Trên đồ thị vô hướng cho trong hình 1: a,d,c,f,e là đường đi đơn độ dài4. Còn d,e,c,a không là đường đi do (e,c) không phải là cạnh của đồ thị. Dãy

 b,c,f,e,b là chu trình độ dài 4. Đường đi a,b,e,d,a,b có độ dài là 5 không phải làđường đi đơn, do cạnh (a,b) có mặt trong nó hai lần. 

a b c a b c

d e f d e f  Hình 1. Đường đi trên đồ thị

Khái niệm đường đi và chu trình trên đồ thị có hướng được định nghĩa hoàn toàntương tự như trường hợp đồ thị vô hướng, chỉ khác là ta chú ý đến hướng trên cáccung.

Định nghĩa 2. Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyêndương, trên đồ thị có hướng G=(V,A) là dãy

 xo , x1 , ... , xn-1 , xn

trong đó u=x0 , v=xn , ( xi , xi+1 ) ∈ A , i= 0, 1, 2 ,..., n-1.

 Đường đi nói trên còn có thể biểu diễn dưới dạng các cung:(x0 , x1 ) , ( x1 , x2 ), ... , ( xn-1 , xn ).

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 7 -

Page 8: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 8/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

 Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi cóđỉnh đầu trùng với đỉnh cuối ( tức là u=v) được gọi là chu trình. Đường đi haychu trình được gọi là đơn nếu như không có cung nào bị lặp lại.

Thí dụ 2. Trên đồ thị có hướng cho trong hình 1: a,d,c,f,e là đường đi đơn độ dài

4. Còn d,e,c,a không là đường đi do (e,c) không phải là cung của đồ thị. Dãy b,c,f,e,b là chu trình độ dài 4. Đường đi a,b,e,d,a,b có độ dài là 5 không phải làđường đi đơn, do cung (a,b) có mặt trong nó hai lần.

Xét một mạng máy tính .Một câu hỏi đặt ra là hai máy tính bất kỳ trongmạng này có thể trao đổi được thông tin với nhau hoặc trực tiếp qua kênh nốichúng hợăc thông qua một hoặc vài máy tính trung gian trong mạng? Nếu sử dụngđồ thị để biểu diễn mạng máy tính này (trong đó các đỉnh của đồ thị tương ứng vớicác máy tính , còn các cạnh tương ứng với các kênh nối) câu hỏi đó được phát biểutrong ngôn ngữ đồ thị như sau: Tồn tại hay chăng đường đi giữa mọi cặp đỉnh củađồ thị ?

Địng nghĩa 3. Đồ thị vô hướng G=(V,E) được gọi là liên thông nếu luôn tìm đượcđường đi giữa hai đỉnh bất kỳ của nó.

 Như vậy hai máy tính bất kỳ trong mạng có thể trao đổi thông tin đượcvới nhaukhi và chỉ khi đồ thị tương ứng với mạng này là đồ thị liên thông.Thí dụ 3. Trong hình 2: Đồ thị G là liên thông, đồ thị H là không liên thông

a bH1

 c

d e H 2

 g f  H 3

G H 

 Hình 2. Đồ thị liên thông G và đồ thị H gồm 3 thành phần liên thông H 1 ,H 2 ,H 3.

Định nghĩa 4. Ta gọi đồ thị con của đồ thị G=(V,E) là đồ thị H=(W,F), trong đóW ⊆ V và F ⊆ E 

Trong trường hợp đồ thị là không liên thông , nó sẽ rã ra thành một số đồ thị conliên thông đôi một không có đỉnh chung. Những đồ thị con liên thông như vậy tasẽ gọi là các thành phần liên thông của đồ thị.

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 8 -

Page 9: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 9/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Thí dụ 4. Đồ thị H trong hình 2 gồm 3 thành phần liên thông là  H 1 ,H 2 ,H 3.

Trong mạng máy tính có thể có những máy ( những kênh nối ) mà sự hỏng hóc củanó có thể ảnh hưởng đến việc trao đổi thông tin trong mạng. Các khái niệm tươngứng với tình huống này được đưa ra trong định nghĩa sau.

Định nghĩa 5. Đỉnh v được gọi là đỉnh rẽ nhánh nếu việc loại bỏ v cùng với cáccạnh liên thuộc với nó khỏi đồ thị làm tăng số thành phần liên thông của đồ thị.Cạnh e được gọi là cầu nếu việc loại bỏ nó khỏi đồ thị làm tăng số thành phầnliên thông của đồ thị .

Thí dụ 5. trong đồ thị G ở hình 2, đỉnh d và e là đỉnh rẽ nhánh, còn các cạnh (d,g)và (e,f) là cầu.

Đối với đồ thị có hướng có hai khái niệm liên thông phụ thuộc vào việc tacó xét đến hướng trên các cung hay không.

Định nghĩa 6. Đồ thị có hướng G=(V,A) được gọi là liên thông mạnh nếu luôntìm được đường đi giữa hai đỉnh bất kỳ của nó.

Định nghĩa 7. Đồ thị có hướng G=(V,A) được gọi là liên thông yếu nếu đồ thị vôhướng tương ứng với nó là đồ thị vô hướng liên thông.

Rõ ràng nếu đồ thị là liên thông mạnh thì nó cũng là liên thông yếu, nhưng điềungược lại là không luôn đúng , như chỉ ra trong thí dụ dưới đây.

Thí dụ 6. Trong hình 3 đồ thị G là liên thông mạnh, còn H là liên thông yếunhưng không là liên thông mạnh 

a ba b

  e  e

c dc d

Hình 3. Đồ thị liên thông mạnh GĐồ thị liên thông yếu H

Một câu hỏi đặt ra là khi nào có thể định hướng các cạnh của một đồ thị vô hướngliên thông để có thể thu được một đồ thị có hướng liên thông mạnh? Ta sẽ gọi đồ

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 9 -

Page 10: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 10/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

thị như vậy là đồ thị định hướng được. Định lý dưới đây cho ta tiêu chuẩn nhận biết một đồ thị có là định hướng được hay không.

Định lý 1. Đồ thị vô hướng liên thông là định hướng được khi và chỉ khi mỗi cạnhcủa nó nằm trên ít nhất một chu trình.

Chứng minh. Điều kiện cần. Giả sử (u,v) là một cạnh của đồ thị ,từ sự tồn tạiđường đi có hướng từ u đến v và ngược lại suy ra (u,v) phải nằm trên ít nhất mộtchu trình.Điều kiện đủ. Thủ tục sau đây cho phép định hướng các cạnh của đồ thị để thuđược đồ thị có hướng liên thông mạnh.Giả sử C là một chu trình nào đó trong đồthị. Định hướng các cạnh trên chu trình này theo một hướng đi vòng theo nó. Nếutất các cạnh của đồ thị là đã được định hướng thì kết thúc thủ tục. Ngược lại , chịnC là một cạnh chưa định hướng có chung đỉnh với ít nhất một trong số các cạnhđã định hướng. Theo giả thiết tìm được chu trình C chứa cạnh e. Định hướng các

cạnh chưa được định hướng của C’ theo một hướng dọc theo chu trình này( khôngđịnh hướng lại các cạnh đã có hướng). Thủ tục trên sẽ được lặp lại cho đến khi tấtcả các cạnh của đồ thị được định hướng. Khi đó ta thu được đồ thị có hướng liênthông mạnh

I.2 Các khái niệm mở đầu về đề tài cần đề cập tới

I.2.1 Mở đầuTrong phần này chúng ta chỉ xét đồ thị có hướng G=(V,E) và |V|=n,|E|=m

với các cung được gán trọng số, nghĩa là , mỗi cung (u,v)∈E của nó được đặt

tương ứng với một số thực a(u,v) gọi là trọng số của nó.Chúng ta sẽ đặt a(u,v)= ∞, nếu (u,v)∉E .Nếu dãy

v0, v1 , ... , v p là một đường đi trên G, thì độ dài của nó đượcđịnh nghĩa là tổng sau:

  p∑a(vi-1, vi)i=1

tức là , độ dài của đường đi chính là tổng các trọng số trên các cung của nó.(Chú ýrằng nếu chúng ta gán trọng số cho tất cả các cung đều bằng 1, thì ta thu đượcđịnh nghĩa độ dài đuờng đi như là số cung của đường đi.

Bài toán tìm đường đi ngắn nhất trên đồ thị dưới dạng tổng quát có thể được phát biểu dưới dạng tổng quát như sau : Tìm đường đi có độ dài nhỏ nhất từ một đỉnhxuất phát s∈V đến đỉnh cuối (đích) t∈V. Đường đi như vậy sẽ gọi là đường đi ngắn nhất từ s đến t  còn độ dài của nó sẽ kí hiệulà d(s,t) và còn gọi là khoảng cách từ s đến t (khoảng cách định nghĩa như vậy cóthể là số âm ).Nếu như không tồn tại đường đi từ s đến t thì ta đặt d(s,t)= ∞ từ đó

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 10-

Page 11: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 11/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

ta thấy chu trình trong đồ thị có độ dài dương,thì trong đường đi ngắn nhất khôngcó đỉnh nào lặp lại(đường đi như thế gọi là đường đi cơ bản).Mặt khác,nếu trong đồ thị có chu trình với độ dài âm(gọi là chu trình âm) thìkhoảng cách giữa 1 số cặp đỉnh nào đó của đồ thị có thể là không xác định, bởi vì,

 bằng cách đi vòng theo chu trình này một số đủ lớn lần, ta có thể chỉ ra đường đi

giữa các đỉnh này có độ dài nhỏ hơn bất kì số thực cho trước nào. Trong truờnghợp như vậy , có thể đặt vấn đề tìm đường đi cơ bản ngắn nhất, tuy nhiên bài toánđặt ra sẽ trở nên phức tạp hơn rất nhiều, bởi vì nó chứa bài toán xét sự tồn tạiđường đi Hamintơn trong đồ thị như là một trường hợp riêng.

Trước hết cần chú ý rằng nếu biết khoảng cách từ s đến t, thì đường đi ngắnnhất từ s đến t, trong trường hợp trọng số không âm, có thể tìm một cách dễ dàng.Để tìm đường đi , chỉ cần chú ý là đối với cặp đỉnh s,t∈V tuỳ ý (s ≠ t) luôn tìmđược đỉnh v sao cho:

d(s,t) = d(s,v) + a(v,t)Thực vậy đỉnh v như vậy chính là đỉnh đi trước đỉnh t trong đường đin ngắn nhất

từ s đến t..Tiếp theo ta có thể tìm được u sao cho d(s,v)=d(s,u)+a(u,v),... Từ giảthiết về tính không âm của các trọng số dễ dàng suy ra rằng dãy t,v,u... không chứađỉnh lặp lại và kết thúc ở đỉnh s.Rõ ràng dãy thu được xác định đường đi ngắn nhấttừ s đến t.

I.2.2 Đường đi ngắn nhất xuất phát từ một đỉnhPhần lớn các thuật toán tìm khoảng cách giữa hai đỉnh s và t được xây dựng

nhờ kỹ thuật tính toán mà ta có thể mô tả đại thể như sau: từ ma trận trọng sốa[u,v],u,v∈V,ta tính cận trên d[v] của khoảng cách từ s đến tất cả các đỉnh v∈V.Mỗi khi phát hiện

d[u]+a[u,v]<d[v] (1)cận trên d[v] sẽ được tốt lên : d[v]=d[u]+a[u,v].Quá trình đó sẽ kết thúc khi nào chúng ta không làm tốt thêm được bất cứ

cận trên nào.Khi đó, rõ ràng giá trị của mỗi d[v] sẽ cho ta khoảng cách từ mỗi đỉnhs đến v. Khi thể hiện kỹ thuật tính toán này trên máy tính, cận trên d[v] sẽ đượcgọi là nhãn của đỉnh v,còn việc tính lại các cận trên này sẽ gọi là phép gán nhãncho đồ thị và toàn bộ thủ tục thường gọi là thủ tục gán nhãn. Nhận thấy rằng đểtính khoảng cách từ s đến tất cả các đỉnh còn lại của đồ thị.Hiện nay vẫn chưa biếtthuật toán nào cho phép tìm đường đi ngắn nhất giữa hai đỉnh làm việc thực sựhiệu quả hơn những thuật toán tìm đường đi ngắn nhất từ một đỉnh đến tất cả các

đỉnh còn lại.Sơ đồ tính toán mà ta vừa mô tả còn chưa là xác định, bởi vì còn phải chỉ rathứ tự chọn các đỉnh u và v để kiểm tra điều kiện (1).Thứ tự chọn này có ảnhhưởng rất lớn đến hiệu quả thuật toán.

I.2.3 Thuật toán Dijkstra_Bài toán ví dụ cụ thể (trường hợp ma trận trọng sốkhông âm)

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 11-

Page 12: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 12/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Trong trường hợp trọng số trên các cung là không âm thuật toán do Dijkstra đềnghị để giải quyết bài toán tìm đường đi ngắn nhất từ đỉnh s đến các đỉnh còn lạicủa đồ thị làm việc hữu hiệu hơn rất nhiều so với thuật toán khác. Thuật toán đượcxây dựng trên cơ sở hán cho các đỉnh các nhãn tạm thời. Nhãn của mỗi đỉnh cho

 biết cận trên của độ dài đường đi ngắn nhất từ s đến nó. Các nhãn này sẽ được

 biếndổi theo thủ tục lặp, mà ở mỗi một bước lặp có một nhãn tạm thời trở thànhnhãn cố định .Nếu nhãn của một đỉnh nào đó trở thành cố định thì nó sẽ cho takhông phải là cận trên mà là độ dài đường đi ngắn nhất từ đỉnh s đến nó.Thuậttoán được mô tả như sau:

Procedure Dijkstra;(*Đầu vào : Đồ thị có hướng G=(V,E) với n đỉnh,

s∈V là đỉnh xuất phát, a[u,v] ∈V, ma trận trọng số;Giả thiết : a[u,v]≥0, u,v∈VĐầu ra : khoảng cách từ đỉnh s đến tất cả các đỉnh còn lại d[v],v∈V.*)

Begin(*khởi tạo*)For v∈V. doBegin

d[v]:=a[s, v];Truoc [v]:=s;

End;d[s]:=0;T:=V\{s};(* T là tập các đỉnh có nhãn tạm thời *)(*Bước lặp*)While T ∅≠ doBegin

Tim dinh u∈T thỏa mãn d[u]=min {d[z]:z∈T};T:=T\{u};(*cố định nhãn của đỉnh u*)For v∈T do (*gán nhãn lại cho csc đỉnh trong T*)If d[v]>d[u]+a[u,v] thenBegin

d[v]:=d[u]+a[u,v];truoc[v]:=u;end;

end;end;

Định lý 1.Thuật toán Dijkstra tìm đường đi có độ dài ngắn nhất trên đồ thị saunhãn thời gian cỡ O(n2 ).

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 12-

Page 13: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 13/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Chứng minh. Trước tìm đường đi ngắn nhất từ đỉnh s đến các đỉnh còn lại của đồthị.Giả sử rằng ở một bước lặp nào đó các nhãn cố định cho ta độ dài các đường đingắn nhất từ s đến các đinh có nhãn cố định,ta sẽ chứng minh rằng ở lần lặp tiếptheo nếu đỉnh u* thu được nhãn cố định thì d(u*) chính là dọ dài đường đi ngắnnhất từ s đén u*.

Kí hiệu S1 là tập các đỉnh có nhãn cố định, S2 là tập các đỉnh có nhãn tạm thời ở  bước lặp đang xét.Kết thúc mỗi bước lặp nhãn tạm thời d(v)cho ta đoọdài củađường đi ngắn nhất từ s đến v chỉ qua những đỉnh nằm hoàn toàn trong tập S1.Giảsử rằn đường di ngắn nhất từ ú đến u* không nằm tron trong tập S1, tức là nó điqua ít nhất một đỉnh của tập S2.Gọi z∈S2 là đỉnh đầu tiên như vậy trên đường đinày.Do trọng số trên các cung là không âm , nên đoạn đường từ s đến u* cóđọ dàiL>0 và d(z) < d(u*) - L < d(u*).Bất đẳng thức này là mâu thuẫn với cách xác định đỉnh u* là đỉnh có nhãn tạmthời nhỏ nhất. Vậy đường đin ngắn nhất từ s đến u* phải nằm trọn trong tập S1, vàvì thế d[u*] là độ dài của nó.Do ở lần lặp đầu tiên S1={s} và sau mỗi lần lặp ta

chỉ them vào S1 một đỉnh u* nên giả thiết là d(v) cho độ dài đường đi ngắn nhất từs đên v với mọi v∈S1 là đúng với bước lặp đầu tiên .Theo qui nạp là suy ra thuậttoán cho ta đường đi ngắn nhất từ s đến mọi đỉnh của đồ thị .Bây giờ sẽ đánh giá số phép toán cần thực hiện theo thuật toán. Ở mỗi bước lặp đểtìm ra điểm u cần thực hiện O(n) phép toán , để gán nhãn lại cũng cần thực hiệnmột số lượng phép toán cũng là O(n) .Thuật toán cần phải thực hiện n-1 bướclặp , vậy thời gian tính toán của thuật toán là cỡ O(n2).

Định lý được chứng minh.

Khi đã tìm được độ dài đường đi ngắn nhất d[v] thì đưòng đi này có thể tìm dựavào nhãn Trước[v],v∈V.

Thí dụ 1: Tìm đường đi ngắn nhất từ đỉnh 1 đến các đỉnh còn lại của đồ thị ở hìnhsau:

(7)

  32 6

(5) (1)( 1 ) (2) (1) (1)(4)

1 (2) 4 (3) 5

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 13-

Page 14: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 14/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Kết quả tính toán theo thuật toán được trình bày trong bản dưới đây.Qui ước viếtthành 2 phần của nhãn theo thứ tự : d[v], Truoc[v]. Đỉnh được đánh dấu * là đỉnhđược chọn để cố định nhãn ở bước lặp đang xét , nhãn của nó không biến đổi ở các

 bước tiếp theo, vì thế ta đánh dấu.

Bảng kết quả tính toán theo thuật toán Dijkstra Nếu chỉ cần tìm đường đi ngắn nhất từ s đến một đỉnh t nào đó thì ta có thể kết

thúc thuật toán khi trở thành có nhãn cố định.

I.2.4 Đường đi trong đồ thị không có chu trình.

Bây giờ ta xét trường hợp riêng thứ hai của bài toán tìm đường đi ngắn nhất, màđể giải nó có thể xây dựng thuật toán với độ phức tạp tính toán O(n2), đó là đồ thịkhông có chu trình( còn trọng số trên các cung có thể là các số thực tuỳ ý ). Trướchết ta chứng minh định lý sau

Định lý 2. Giả sử G là đồ thị không có chu trình. Khi đó các đỉnh của nó có thể 

đánh số sao cho mỗi cung của đồ thị chỉ hướng từ đỉnh có chỉ số nhỏ hơn đến đỉnhcó chỉ số lớn hơn , nghĩa là mỗi cung của nó có thể biểu diễn dưới dạng (v[i],v[j]), trong đó i<j .

T hí dụ 3. Đồ thị trong hình sau có các đỉnh được đánh số thỏa mãn điều kiện nêutrong định lý.

7 (3) 8

(5) t=9(1) (1)

s=1 (2) 4 (5) 5 (4)6 (1) (7) (10)

(5)2 (2) 3

  Hình .Đồ thị không có chu trình

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 14 -

Bước lặp Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6Khởi tạo 0, 1 1, 1* ∞ ,1 ∞ ,1 ∞ ,1 ∞ ,11 - - 6, 2 3, 2 * ∞ , 1 8, 22 - - 4, 4 * - 7, 4 8, 23 - - - - 7, 4 5, 3 *4 - - - - 6, 6 * -5

Page 15: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 15/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Để chứng minh định lý ta mô tả thuật toán sau, cho phép tìm ra cách đánh số thỏamãn điều kiênk định lý.

Procedure Numbering;(* Đầu vào : Đồ thị có hướng G=(V,E) với n đỉnh không chứa chu trình được

cho bởi danh sách kề Ke(v),v∈ V Đầu ra: Với mỗi đỉnh v∈ V chỉ số NR[u] < NR[v]. *)

BeginFor v∈ V do Vao[v]:=0;(* tinh Vao[v]=deg-(v) *)For u∈ V doFor v∈Ke(u) do Vao[v]:=Vao[v] + 1;

QUEUE:= ;For v∈ V doIf Vao[v]=0 then QUEUE ⇐ v ;

 Num :=0;While QUEUE ≠ doBegin u ⇐ QUEUE;

 Num :=num +1; NR[u] :=num;For v∈Ke(u) doBegin

Vao[v]:=Vao[v] - 1;If Vao[v]=0 then QUEUE ⇐ v ;

End;End;

End;Thuật toán được xây dựng dựa trên ý tưởng rất đơn giản sau : Rõ rang trong đồ thịkhông có chu trình bao giờ cũng tìm được đỉnh có bán bậc vào bằng 0 ( không cócung đi vào ). Thực vậy, bắt đầu từ đỉnh v1 nếu có cung đi vào nó từ v2 thì ta lạichuyển sang xét đỉnh v2. Nếu có cung v3 đi vào v2, thì ta chuyển sang xét v3... Dođồ thị là không có chu trình nên sau một số hữu hạn lần chuyển như vậy ta phải điđến đỉnh không có cung đi vào . Thoạt tiên, tìm các đỉnh như vậy của đồ thị . Rõràng ta có thể đáng số chúng theo một thứ tự tuỳ ý bắt đầu từ 1.Tiếp theo, loại bỏkhỏi đồ thị những đỉnh đã được đánh số cùng các cung đi ra khỏi chúng, ta thuđược đồ thị mới cũng không có chu trình, và thủ tục được lặp lại với đồ thị mớinày. Quá trình đó sẽ được tiếp tục cho đến khi tất cả các đinỉh của đồ thị đượcđánh số.Chú ý:

1) Rõ ràng trong bước khởi tạo ta phải duyệt qua tất cả các cung của đồ thịkhi tính bán bậc vào của các đỉnh, vì vậy ở đó ta tốn cỡ O(m) phéptoán,trong đó m là số cung cua đồ thị . Tiếp theo mỗi lần đánh số một

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 15-

Page 16: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 16/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

đỉnh, để thực hiện viêcv loại bỏ đỉnh đã được đánh số cùng với các cungđi ra khỏi nó , chúng ta sẽ phải duyệt qua tất cả các cung này. Suy ra đểđánh số all các đỉnh củ đồ thị chúng ta sẽ phả duyệt tất cả các cung củađồ thị một lần nữa. Vậy độ phức tạp thuật toán la O(m).

2) Thuật toán có thể để kiểm tra xem đồ thị có chứa chu trình hay không?

Thực vậy, nếu kết thúc thuật toán vẫn còn có đỉnh chưa được đánh số(num<n) thì điều đó có nghĩa là đồ thị chứa chu trình.

Do có thuật toán đánh số trên, nên khi xét đồ thị không có chu trình ta có thể giảthiết là các đỉnh của nó được đánh số sao cho mỗi cung chỉ đi từ đỉnh có chỉ sốnhỏ đến đỉnh có chỉ số lớn hơn . Thuật toán tìm đường đi ngắn nhất trên đồ thịkhông có chu trình được mô tả trong sơ đồ sau đây :

Procedure Critical_Path;(* Tìm đường đi ngắn nhất từ đỉnh nguồn đến tất cả các đỉnh còn lại trên đồthị không có chu trình *)

Đầu vào: Đồ thị G=(V,E) trong đó V= { v[1], v[2], ..., v[n] }

 Đối với mỗi cung (v[i],v[j])∈ E ta có i<j. Đồ thị được cho bởi danh sách kề Ke(v),v∈V.

Đầu ra: Khoảng cách từ v[1] đến tất cả các đỉnh còn lại được ghi trong mảng d[v[i] ], i=1,2,...,n * )

Begind[v[1] ]:=0;

for j:=2 to n do d[v[j] ]:=a[v[1] ],v[j] ];fo j:=2 to n do

for  v∈Ke [v [j ] ] do

d [v ]:=min ( d [v ], d [v [j ] ] + a [v [j ] ], v );end;Độ phức tạp của thuật toán là O(m)., do mỗi cung của đồ thị phải xét qua đúngmột lần.Các thuật toán mô tả ở trên thường được ứng dụng vào việc xây dựng nhừn

 phương pháp giải bài toán điều khiển việc thực hiện những dự án lớn, gọi tắt làPERT (Project Evaluation and Review Technique ) hqy CMD ( Critical pathmethod)I.2.5 Đường đi ngắn nhất giữa tất cả các cặp đỉnhRõ ràng ta có thể giải bài toán tìm đường đi ngắn nhất giữa tất cả các căặpđỉnh của

đồ thị bằng cách sử dụng n lần thuật toán mô tả ở mục trước, trong đó ta sẽ chọn slần lượt là các đỉnh của đồ thị .Rõ ràng , khi đó ta thu được thuật toán với độ phứctạp là O(n4) (nếu dùng tt Ford-Bellman) hoặc O(n3) đối với trường hợp trọng sốkhông âm hoặc đồ thị không có chu trình. Trong trường hợp tổng quát , sử dụngthuật toán Ford-Bellman n lần không phải là cách làm tốt nhất . Ở đây ta sẽ mô tảthuật toán với độ phức tạp tính toán O(n3) : thuật toán Floyd, tt được mô tả nhưsau

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 16 -

Page 17: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 17/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Procedure Floyd;(* Tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh

Đầu vào : Đồ thị cho bởi ma trận trọng số a[i,j], i,j=1,2,...,nĐầu ra : Ma trận đường đi ngắn nhất giữa các cặp đỉnh

d[i,j] i,j =1,2,...,n

trong đó d[i,j] cho độ dài đường di ngắn nhất từ i đến j.Ma trận ghi nhận đường đi

 p[i,j], i, j=1,2,...,n.trong đó p[i,j] ghi nhận đỉnh đi trước j trong đường đi ngắn nhất từ i đến j.

*)Begin

(* Khởi tạo *)For i:=1 to n do

For j:=1 to n do

Begin d[i,j]:=a[i,j]; p[i,j]:=i;

end;(* Bước lặp *)

For k:=1 to n doFor i:=1 to n do

For j:=1 to n doIf d[i,j] > d[i,k] + d[k,j] thenBegin

d[i,j]:= d[i,k] + d[k,j ]; p [i,j ]:= p [k,j ];end;

end;Rõ ràng độ phức tạp của thuật toán là O(n3).

Chương II : GIẢI THUẬT_LƯU ĐỒ THUẬT TOÁN DIJKSTRA

II.1 Phân tích.Dùng ma trận kề để biểu diễn đồ thị C= (cij), cij = trọng số của cung (i,j), cij =+

∞ nếu không có cung (i,j). Một mảng d[] để ghi các độ dài đường đi ngắn nhất từ stới đỉnh i đang có . Xuất phát d[s] =0 và d[i] =c si nếu i kề s, d[j] =+ ∞ nếu jkhông kề s.II.2 Giải thuật tìm đường đi ngắn nhất giữa một cặp đỉnh.

Định nghĩa 1.0. 

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 17 -

Page 18: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 18/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Xét đồ thị có trọng số cạnh G = (V,E,w), với hàm trọng số w: E →  R

là ánh xạ từ tập các cạnh E đến tập số thực R .

Định nghĩa 1.1. Đường đi  p từ đỉnh u đến đỉnh v là dãy các cạnh nối

tiếp nhau bắt đầu từ đỉnh u kết thúc tại đỉnh v. Đường đi  p từ u đến v được biểudiễn như sau: p=(u=v0 ,v1…,vk =v)

Định nghĩa 1.2.  Độ dài của đường đi  p = ( v0 ,v1 ,...,vk  ) , ký hiệu ω  ( p),

là tổng các trọng số của các cạnh trên đường đi:

  ω  ( p) = ∑=

i

iivvw

1

1 ),(

Định nghĩa 1.3. Gọi ℘ (u,v) là tập tất cả đường đi từ u đến v. Độ dàiđường đi ngắn nhất từ đỉnh u đến đỉnh v được xác định bởi:

d (u,v) = vu  p  p )},(|)({min ℘∈ω  

Định nghĩa 1.4. Đường đi ngắn nhất pmin(u,v) từ đỉnh u đến đỉnh v làđường đi có độ dài d (u,v).

II.3 Giải thuật Dijkstra.II.3.1 Nội dung

Có rất nhiều giải thuật đã được phát triển để giải bài toán tìm đường đi ngắn nhất

giữa một cặp đỉnh, trong khuôn khổ bài viết này em chỉ xin giới thiệu giải thuật

Dijkstra. Giải thuật Dijkstra là một giải thuật để giải bài toán đường đi ngắn nhất

nguồn đơn trên một đồ thị có trọng số cạnh mà tất cả các trọng số đều không âm.

 Nó xác định đường đi ngắn nhất giữa hai đỉnh cho trước, từ đỉnh a đến đỉnh b.

Ở mỗi đỉnh v, giải thuật Dijkstra xác định 3 thông tin: k v, d v và pv.

k v: mang giá trị boolean xác định trạng thái được chọn của đỉnh v.

Ban đầu ta khởi tạo tất cả các đỉnh v chưa được chọn, nghĩa là:

k v = false, ∀ v ∈ V .

d v: là chiều dài đường đi mà ta tìm thấy cho đến thời điểm đang xét

từ a đến v.

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 18-

Page 19: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 19/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Khởi tạo, d v = ∞  , ∀v ∈ V \{a}, d a = 0.

 pv: là đỉnh trước của đỉnh v trên đường đi ngắn nhất từ a đến b.

Đường đi ngắn nhất từ a đến b có dạng {a,...,pv ,v,...,b}. Khởi tạo,  pv = null ,

∀v∈ V .

Sau đây là các bước của giải thuật Dijkstra:

B1. Khởi tạo: Đặt k v:= false ∀v ∈ V ; d v:= ∞  ,∀v ∈ V \ {a} , d a:=0.

B2. Chọn v ∈ V sao cho k v = false và d v = min {d t  / t ∈ V, k t  = false}

 Nếu d v = ∞ thì kết thúc, không tồn tại đường đi từ a đến b.

B3. Đánh dấu đỉnh v, k v:= true.

B4.  Nếu v = b thì kết thúc và d b là độ dài đường đi ngắn nhất từ a đến b. Ngược lại nếu v ≠  b sang B5.

B5. Với mỗi đỉnh u kề với v mà k u = false, kiểm tra

 Nếu d u > d v + w(v,u) thì d u:= d v + w(v,u)

Ghi nhớ đỉnh v: pu:= v.Quay lại B2.

II.3.2 Độ phức tạp của giải thuật Dijkstra.

*** Trường hợp sử dụng ma trận kề.

Gọi  f (n) là số lần giải thuật Dijkstra khảo sát một cạnh của đồ thị G trong

trường hợp xấu nhất. Khi đó ta có:

 f (n) < O(|V|2)

  Chứng minh: Cho n = |V |, B5 là vòng lặp chứa các bước B2 → B5, vòng lặp

được thực hiện đến khi v = b.Vì ở mỗi vòng lặp ta rút ra một đỉnh của V và khởi

đầu V có n phần tử, nên vòng lặp được xử lý nhiều nhất là n lần.

Ở B2 số đỉnh tối đa được khảo sát là n - 1 đỉnhỞ B5 số đỉnh kề tối đa được khảo sát là n -1 đỉnh

Do đó:  f (n) ≤  2(n-1)n < O(|V|2)

Vậy độ phức tạp của giải thuật Dijkstra là O(|V|2).

   SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 19-

Page 20: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 20/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

*** Trường hợp sử dụng danh sách kề

Độ phức tạp của giải thuật Dijkstra là O((|V | + | E |)lg |V |).

II.3.3 Lưu đồ thuật toán Dijstra

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 20-

Begin

n, C = (cij), a, z

L(a) = 0L(v) = v aT(i) = 1 i n

z T

Chọn v T sao cho L[v] đạt minT = T \ {v}

x T & kề v

L(x) = min(L(x), L(v) + c(v,x))

End

S

Đ

S

     Đ

L(z)

Page 21: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 21/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

II.3.4 Bảng dữ liệu chạy thô.

Tạo ma trận như sau60 4 2 0 0 0

4 0 1 5 0 02 1 0 8 10 00 5 8 0 2 60 0 10 2 0 30 0 0 6 3 0

Ta có đồ thị như saub 5 c

4 6a d

1 8210 3

e f 

Bảng chạy thô

V T a b e c f d0 ∞ ∞ ∞ ∞ ∞

a bcdef * 4 2* ∞ ∞ ∞

e bcfd 3* * 10 12 ∞b cfd * 8* 12 ∞

c fd * 12* 14f d * 15d *

độ dài từ af là 15

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 21-

Page 22: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 22/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Chương III : CÀI ĐẶT CHƯƠNG TRÌNH

Đề tài : Chương trình tìm đường đi ngắn nhất từ đỉnh S đến đỉnh T theothuật toán Dijkstra _Sử dụng ngôn ngữ lập trình C

#include<iostream.h>#include<conio.h>#include<stdlib.h>#include<stdio.h>

#define m 50int C[m][m],DD[m],L[m],T[m];

int n;void inmatran(char *st,int C[m][m])

{cout<<"\n\n"<<st;for(int i=1;i<=n;i++){cout<<"\n";for(int j=1;j<=n;j++)

cout<<C[i][j]<<"\t";}

}

void docfile(char *st){FILE*f;int t;f=fopen(st,"rt");if(f!=NULL)

{fscanf(f,"%d",&n);for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

{fscanf(f,"%d",&t);C[i][j]=t;

}fclose(f);

}}

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 22-

Page 23: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 23/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

void Dijkstra(int a,int z){

for(int i=1;i<=n;i++){

L[i]=1000;

T[i]=1;DD[i]=0;

}L[a]=0;while(T[z]==1)

{for(int v=1;v<=n;v++)

if(T[v]==1 && L[v]!=1000) break;for(int j=v+1;j<=n;j++)

if(T[j]==1 && L[j]<L[v]) v=j;

T[v]=0;for(int x=1;x<=n;x++)if(T[x]==1 && C[v][x]!=0)

if(L[x]> (L[v]+C[v][x])){

L[x]=L[v]+C[v][x];DD[x]=v;

}}

}

void duongdi(int a,int z){cout<<"\n\n\tDo dai duong di ngan nhat : "<<L[z];cout<<"\n\n\tDuong di: ";while(DD[z]!=0)

{printf("%d <-- ",z);z=DD[z];

}cout<<a;

}void main(){clrscr();docfile("d:\\ok\\dacs\\matran.dnc"); //chú ý đường dẫn của ma trận cout<<"\n\n*** TIM minPath() BANG THUAT TOAN DIJKSTRA. ***";

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 23-

Page 24: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 24/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

Dijkstra(a,z);  // thay 1 giá trị cụ thể duongdi(a,z); // thay 1 giá trị cụ thể getch();

}

*****Kết luận******

Tóm lại, thông qua môn học này giúp em nắm bắt tốt hơn về bài toán tìm đường đingắn nhất giữa hai đỉnh thông qua thuật toán Dijkstra.Tuân theo các nguyên tắc mà thầy hướng dẫn đề ra, tuy nhiên vẫn còn nhiều saisót trong quá trình hoàn thành đồ án cơ sở này,mong thầy giúp đỡ nhiều hơn....

******Tài liệu tham khảo*****

Toán rời rạc_tác giả: Nguyễn Đức Nghĩa, Nguyễn Tô Thành_NXB Giáo Dục 

***Nhận xét, hướng phát triển, ý kiến đánh giá của thầy hướng dẫn***........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

........................................................................................................................................................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

........................................................................................................................................................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 24 -

Page 25: do an thuật toán tìm đường đi ngắn nhất trong do thi

5/11/2018 do an thuâ t toán tìm đương đi ngă n nhâ t trong do thi - slidepdf.com

http://slidepdf.com/reader/full/do-an-thuat-toan-tim-duong-di-ngan-nhat-trong-do-thi 25/25

 

Đồ án cơ sở GVHD: Đoàn Văn Thắng  

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

........................................................................................................................................................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

........................................................................................................................................................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

........................................................................................................................................................................................................................................................................

....................................................................................................................................

....................................................................................................................................

....................................................................................................................................

  SVTH : Nguyễn Công Hiếu_SBD 0041 - Trang 25-