Ngày đăng: 24/03/2015, 08:51
MỤC LỤC CHƯƠNG 1. ĐẠI CƯƠNG VỀ ĐỒ THỊ 4 CHƯƠNG 2. CHU TRÌNH EULER VÀ BÀI TOÁN NGƯỜI ĐƯA THƯ 8 2.1. Định nghĩa 8 2.2. Điều kiện cần và đủ 8 2.2.1. Định lý 1 (Định lý Euler) 8 2.3. Các thuật toán tìm chu trình Euler 10 2.4. Thiết kế cấu trúc dữ liệu và giải thuật tìm đường đi, chu trình Euler 12 2.5. Bài toán người đưa thư 14 3.1. Tìm đường đi, chu trình Euler 18 3.2. Giải bài toán người đưa thư 21 Toán ứng dụng Chu trình Euler và bài toán người đưa thư GIỚI THIỆU Lý thuyết đồ thị là ngành khoa học được phát triển từ lâu nhưng lại có nhiều ứng dụng hiện đại. Những ý tưởng cơ bản của nó được đưa ra từ thế kỷ XVIII bởi nhà toán học Thụy sĩ tên là Leonhard Euler. Lý thuyết đồ thị được dùng để giải các bài toán trong nhiều lĩnh vực khác nhau. Chúng ta có thể xác định 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ất giữa hai thành phố trong mạng giao thông. Chúng ta cũng còn sử dụng đồ thị để giải các bài toán về lập lịch, thời khóa biểu, và phân bố tần số cho các trạm phát thanh và truyền hình… Ngày nay Lý thuyết đồ thị đã phát triển thành một ngành Toán học ứng dụng có vị trí đặc biệt quan trọng về mặt lý thuyết cũng như ứng dụng. Trong nội dung cuốn tiểu luận này nhóm chúng tôi xin trình bày về “Chu trình Euler và bài toán người đưa thư”. Đồng Hới, tháng 05 năm 2012 Tiểu luận nhóm 1 Trang Toán ứng dụng Chu trình Euler và bài toán người đưa thư – Đề tài: Chu trình Euler và bài toán người đưa thư – Nhóm: 6 người STT Họ tên Công việc (theo mục lục) Chữ ký Nhận xét của giáo viên 1 Nguyễn Trần Sỹ Chương 1 2 Võ Phi Thanh 2.12.4 3 Nguyễn Thị Hà Phương 2.5 4 Hoàng Công Tiến 2.5 5 Hoàng Đình Tuyền Chương 3 6 Nguyễn Duy Linh Chương 3 Tiểu luận nhóm 1 Trang Toán ứng dụng Chu trình Euler và bài toán người đưa thư CHƯƠNG 1. ĐẠI CƯƠNG VỀ ĐỒ THỊ 1.1 Giới thiệu Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều ứng dụng trong ngành công nghệ thông tin. Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất vào 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ỹ: Leonhard Euler. Chính ông là người đã sử dụng đồ thị để giải bài toán nổi tiếng về 7 cái cầu ở thành phố Konigberg. Những ứng dụng cơ bản của đồ thị như: – Xác định tính liên thông trong một mạng máy tính: hai máy tính nào đó có thể truyền dữ liệu cho nhau được không. – Tìm đường đi ngắn nhất trên mạng giao thông – … 1.2 Định nghĩa đồ thị Định nghĩa 1.2.1. Một đơn đồ thị vô hướng là một bộ G=, trong đó: – V ≠ Ø là tập hợp hữu hạn gồm các đỉnh của đồ thị. – E là tập hợp 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. Như vậy, theo định nghĩa trên, trong một đơn đồ thị không thể có các cặp cạnh nối cùng một cặp đỉnh (do E là tập hợp nên không thể có 2 cặp trùng nhau), các cạnh đều không phân biệt thứ tự nên cạnh [u,v] và cạnh [v,u] đều được coi là một cạnh duy nhất, điều này phù hợp với việc biểu diễn các con đường 2 chiều, và hiển nhiên là không có cặp [u,u] nào đó trong E. Ví dụ 1.1. Định nghĩa 1.2.2. Đa đồ thị vô hướng là một bộ G=, trong đó – V ≠ Ø là tập hợp hữu hạn gồm các đỉnh của đồ thị. – E là một họ các cặp không có thứ tự của V gọi là các cạnh. Định nghĩa 1.2.3. Đơn đồ thị có hướng là một bộ G=, trong đó: – V ≠ Ø là tập hợp hữu hạn gồm các đỉnh của đồ thị. – E là tập hợ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. Ví dụ: Tiểu luận nhóm 1 Trang a. Đơn đồ thị vô hướng b. Không phải đơn đồ thị vô hướng do có các cặp cạnh nối cùng một cặp đỉnh c. Không phải đơn đồ thị vô hướng do có cạnh nối một đỉnh với chính nó. Toán ứng dụng Chu trình Euler và bài toán người đưa thư Định nghĩa 1.2.4. Đa đồ thị có hướng là một bộ G=, trong đó – V ≠ Ø là tập hợp hữu hạn gồm các đỉnh của đồ thị. – E là một họ các cặp có thứ tự của V gọi là các cung. Các cung nối cùng một cặp đỉnh được gọi là các cung song song. Ví dụ: Chú ý: – Đồ thị sau vẫn được coi là đơn đồ thị có hướng vì e1và e2, e3 và e4 không phải là 2 cung song song (do khác hướng). 1.3. Một số thuật ngữ cơ bản Định nghĩa 1.3.1. Cho đồ thị vô hướng G=. – Hai đỉnh u và v của đồ thị được gọi là kề nhau nếu (u,v) là một cạnh của đồ thị. – Nếu e=(u,v) là cạnh của đồ thị thì ta nói cạnh này là liên thuộc với hai đỉnh u và v. Cạnh được nói là nối đỉnh u và v. Đỉnh u và v được gọi là đỉnh đầu của cạnh e. Định nghĩa 1.3.2. Cho đồ thị vô hướng G=. Bậc của đỉnh v trong đồ thị, ký hiệu là deg(v), là số cạnh liên thuộc với nó. Đỉnh có bậc 0 được gọi là đỉnh cô lập, đỉnh có bậc 1 gọi là đỉnh treo. Định nghĩa 1.3.3 Cho đồ thị có hướng G=. – Hai đỉnh u và v của đồ thị được gọi là kề nhau nếu (u,v) là một cung của đồ thị. – Nếu e=(u,v) là cung của đồ thị thì ta nói cung này đi ra khỏi đỉnh u vào đi vào đỉnh v. Đỉnh u được gọi là đỉnh đầu của cung e và đỉnh v được gọi là đỉnh cuối của cung e. 1.4. Đường đi, chu trình và đồ thị liên thông Định nghĩa 1.4.1. Cho đồ thị *G = (* ký hiệu cho dùng chung cả đồ thị vô hướng và có hướng). Đường đi độ dài n từ đỉnh u đến đỉnh v (n là số nguyên dương) là dãy: Tiểu luận nhóm 1 Trang Toán ứng dụng Chu trình Euler và bài toán người đưa thư trong đó * Ta sẽ dùng thuật ngữ đồ thị để chỉ chung cho cả đồ thị vô hướng và đồ thị có hướng Đường đi nói trên còn có thể được biểu diễn bằng dãy các cạnh/cung: Đỉnh u gọi là đỉnh đầu của đường đi, đỉnh v gọi là đỉnh cuối của đường đi. Đường đi có đỉnh đầu và đỉnh cuối trùng nhau (u=v) gọi là chu trình. Ví dụ: Cho đồ thị vô hướng sau: Một số đường đi từ đỉnh 2 đến đỉnh 7: – Đường đi d1: 2 3 4 7 (đường đi độ dài 3) – Đường đi d2: 2 3 4 1 3 6 7 (đường đi độ dài 6) Một số chu trình trên đồ thị trên: – Chu trình C1: 1 2 3 1 (chu trình có độ dài 3) – Chu trình C2: 1 2 3 7 6 3 4 1 (chu trình có độ dài 7) Định nghĩa 1.4.2. Đồ thị vô hướng G = đượ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ó. Ví dụ: Xét các đồ thị vô hướng sau: Trong 2 đồ thị trên thì G1là đồ thị liên thông, còn G2 không phải là đồ thị liên thông vì giữa hai đỉnh 1 và 2 không tồn tại một đường đi nào. Định nghĩa 1.4.3 Cho đồ thị G = (V,E). Đồ thị H = được gọi là đồ thị con của G nếu và chỉ nếu W € V và F € E. Trong trường hợp một đồ thị vô hướng G không liên thông, nó sẽ được phân thành các đồ thị con độc lập nhau và chúng đều liên thông. Mỗi đồ thị con như vậy được gọi là một thành phần liên thông của G. Định nghĩa 1.4.4 Cho đồ thị vô hướng G =. Đỉnh v của đồ thị được gọi là đỉnh rẽ nhánh nếu việc loại bỏ v và các cạnh liên thuộc với nó ra khỏi đồ thị sẽ làm tăng số thành phần liên thông của đồ thị. Cạnh e của đồ thị được gọi là cầu nếu việc loại bỏ nó ra khỏi đồ thị sẽ làm tăng số thành phần liên thông của đồ thị. Ví dụ: Xét đồ thị sau: Tiểu luận nhóm 1 Trang Toán ứng dụng Chu trình Euler và bài toán người đưa thư Trong đồ thị trên, đỉnh 2 là đỉnh rẽ nhánh vì việc loại đỉnh này cùng với các cạnh (2,3), (2,1), (2,6) sẽ làm đồ thị có 2 thành phần liên thông. Cạnh (2,3) là cầu. Các cạnh còn lại đều không phải là cầu. Đối với đồ thị có hướng khái niệm liên thông khó thỏa mãn hơn do các cung bị hạn chế về chiều. Từ đó, bên cạnh khái niệm liên thông như đề cập trong đồ thị vô hướng, ta sẽ đưa thêm khái niệm liên thông nhẹ hơn: liên thông yếu. Định nghĩa 1.4.5. Cho G = là đồ thị có hướng. a. G được gọi là liên thông mạnh nếu luôn tìm được đường đi giữa hai đỉnh bất kỳ của nó. b. G được gọi là liên thông yếu nếu đồ thị vô hướng tương ứng với nó (đồ thị vô hướng có được bằng cách biến các cung một chiều thành các cạnh hai chiều) là đồ thị vô hướng liên thông. 1.5 Biểu diễn đồ thị trên máy tính Định nghĩa 1.5.1.1. Cho đồ thị G =, với tập đỉnh V = {v1, v2,, vn}. Ta gọi ma trận kề của đồ thị là ma trận A, kích thước nxn được xác định như sau: Ví dụ: a. Xét đồ thị vô hướng sau: Ma trận kề của đồ thị trên sẽ là: Tiểu luận nhóm 1 Trang Toán ứng dụng Chu trình Euler và bài toán người đưa thư CHƯƠNG 2. CHU TRÌNH EULER VÀ BÀI TOÁN NGƯỜI ĐƯA THƯ 2.1. Định nghĩa Cho đồ thị G=(V,E), V là tập hợp các đỉnh, E là tập hợp các cạnh Chu trình Euler là chu trình qua mọi cạnh và mọi đỉnh đồ thị, mỗi cạnh không đi quá 1 lần. Đường đi Euler là đường đi qua mọi cạnh và mọi đỉnh đồ thị, mỗi cạnh không đi quá 1 lần. Cho đồ thị có hướng G=(V,E). Chu trình có hướng Euler là chu trình có hướng qua mọi cung và mọi đỉnh đồ thị, mỗi cung không đi quá 1 lần. Đường đi có hướng Euler là đường đi có hướng qua mọi cung và mọi đỉnh đồ thị, mỗi cung không đi quá 1 lần. Đồ thị chứa chu trình Euler gọi là Đồ thị Euler. 2.2. Điều kiện cần và đủ 2.2.1. Định lý 1 (Định lý Euler) Đồ thị G có chu trình Euler khi và chỉ khi G liên thông và mọi đỉnh có bậc chẵn khác 0. Chứng minh (i) (⇒): Giả sử G có chu trình Euler và v là đỉnh bất kỳ của G. Khi đó chu trình Euler đến v theo cạnh e thì ra khỏi v bằng cạnh e’ ≠ e. Do đó bậc của v phải là số chẵn. G hiển nhiên là liên thông. (ii) (⇐): Giả sử G liên thông và mọi đỉnh có bậc chẵn khác 0. Ta chứng minh G có chu trình Euler quy nạp theo số cạnh m của G. • m = 1: Vì G liên thông và mọi đỉnh bậc chẵn nên G chỉ có 1 đỉnh và 1 khuyên. Khuyên đó cũng tạo thành chu trình Euler. • Giả sử G có m cạnh, số đỉnh n > 0 và mọi đồ thị liên thông có số cạnh nhỏ hơn m với mọi đỉnh bậc chẵn đều có chu trình euler. + Trường hợp n = 1 hoặc 2 thì hiển nhiên tồn tại chu trình Euler. + Trường hợp n > 2. Vì bậc của các đỉnh chẵn ≥ 2, bao giờ cũng chọn được 3 đỉnh a, b, c với các cạnh x = (a,b), y = (a,c). – Giả sử G chứa cạnh z = (b,c). Xét đồ thị G’ thu được từ G bằng cách loại bỏ ba cạnh x,y,z. Sẽ xảy ra 1 trong ba khả năng sau: Tiểu luận nhóm 1 Trang Toán ứng dụng Chu trình Euler và bài toán người đưa thư G’ liên thông. Vì số cạnh của G’ nhỏ hơn m và các đỉnh vẫn có bậc chẵn nên theo giả thiết quy nạp tồn tại chu trình Euler C’ của G’. Nối chu trình con (x,y,z) với C’ ta thu được chu trình Euler C của G. G’ có 2 thành phần liên thông G 1 và G 2. Không mất tính tổng quát giả sử G 1 chứa a, G 2 chứa b và c. G 1 có chu trình Euler C 1, G 2 có chu trình Euler C 2. Ta xây dựng chu trình Euler C của G như sau. Xuất phát từ đỉnh a đi theo chu trình C 1 quay về a, sau đó đi theo cạnh x = (a,b) đến đỉnh b, từ b đi theo chu trình C 2 quay về b, sau đó đi theo cạnh z = (b,c) và y = (c,a) quay về a. 2.2.2. Định lý 2 Cho đồ thị G có k đỉnh bậc lẻ. Khi đó số đường đi tối thiểu phủ G là k/2. Chứng minh. Ta đã biết số đỉnh bậc lẻ là chẵn, k=2n. Chứng minh quy nạp theo n. (i) n=1: Nối 2 đỉnh bậc lẻ với nhau bằng cạnh z ta thu được đồ thị G’ thoả định lý Euler. Như vậy G’ có chu trình Euler C’. Bỏ cạnh z trên C’ ta thu được đường đi Euler phủ G. (ii) Giả sử G có số đỉnh bậc lẻ là 2n và định lý đúng với k<2n. Nối 2 đỉnh bậc lẻ a,b nào đó với nhau bằng cạnh z ta thu được đồ thị G’ có 2n-2 đỉnh bậc lẻ. Theo giả thiết quy nạp G’ có n-1 đường đi phủ G’. Gọi P là đường đi qua cạnh z. Hiển nhiên a, b không phải đỉnh đầu hoặc cuối của P, vì vậy nếu bỏ cạnh z ta thu được 2 đường đi P 1 và P 2 cùng với n-2 đường đi còn lại phủ đồ thị G. (đpcm) Bây giờ xét đồ thị có hướng G = (V, A). Ký hiệu R = {u ∈ V : d I (v) = d O (v)} S = {u ∈ V : d I (v) > d O (v)} T = {u ∈ V : d I (v) < d O (v)} Từ bổ đề bắt tay ta có ∑ ∈Vv O vd )( = ∑ ∈Vv I vd )( ⇒ ( ) ∑ ∈ − Sv OI vdvd )()( = ( ) ∑ ∈ − Tv IO vdvd )()( Ta ký hiệu k = ( ) ∑ ∈ − Sv OI vdvd )()( = ( ) ∑ ∈ − Tv IO vdvd )()( 2.2.3. Định lý 3 Tiểu luận nhóm 1 Trang Toán ứng dụng Chu trình Euler và bài toán người đưa thư (i) Đồ thị có hướng G có chu trình có hướng Euler khi và chỉ khi G liên thông yếu và mọi đỉnh có nửa bậc vào bằng nửa bậc ra, tức S = ∅ và T = ∅ (ii) Nếu S ≠ ∅, thì số đường đi có hướng tối thiểu phủ G là k. Các đường đi này nối các đỉnh của T đến các đỉnh của tập S. Ví dụ: Đồ thị Đồ thị trên có chu trình Euler: (A,B,C,D,A) 2.3. Các thuật toán tìm chu trình Euler 2.3.1. Thuật toán 1 + Đầu vào. Đồ thị G ≠ ∅, không có đỉnh cô lập. + Đầu ra. Chu trình Euler C của G, hoặc kết luận G không có chu trình Euler. + Phương pháp. (1) Xuất phát: Đặt H := G, k := 1, C := ∅. Chọn đỉnh v ∈ G bất kỳ. (2) Xuất phát từ v, xây dựng chu trình bất kỳ C k trong H. Nếu tồn tại C k, nối C k vào C, C := C ∪ C k. Sang bước (3) Nếu không tồn tại C k, thì kết luận không có chu trình Euler, kết thúc. (3) Loại khỏi H chu trình C k. Nếu H chứa các đỉnh cô lập. thì loại chúng khỏi H. Sang bước (4) (4) Nếu H = ∅, thì kết luận C là chu trình Euler, kết thúc. Ngược lại sang bước (5) (5) Nếu H và C không có đỉnh chung, thì kết luận không có chu trình Euler, kết thúc. Nếu H và C có đỉnh chung. Chọn v là đỉnh chung của H và C. Đặt k := k+1. Quay lại bước (2). Ví dụ Cho G là đồ thị Thanh mã tấu Mohammed. Tiểu luận nhóm 1 Trang 10 e f k h i j g c d b a A B C D [...]... chương trình: Đồ thị G: Đồ thị G sau khi thêm cạnh 1 1 4 8 5 6 9 G Tiểu luận nhóm 1 1 0 3 2 3 2 7 4 5 6 7 1 1 8 9 10 11 GT Trang 27 Toán ứng dụng Chu trình Euler và bài toán người đưa thư File dữ liệu vào: GRAPH1.INP Kết quả chạy chương trình: File dữ liệu ra: CYCLE.OUT Tiểu luận nhóm 1 Trang 28 Toán ứng dụng Chu trình Euler và bài toán người đưa thư KẾT LUẬN Trên cơ sở nghiên cứu kiến thức từ giáo trình. .. chương trình: Đồ thị G: Tiểu luận nhóm 1 Trang 20 Toán ứng dụng Chu trình Euler và bài toán người đưa thư 1 3 2 4 5 6 File dữ liệu vào: GRAPH.INP Kết quả khi chạy chương trình: 3.2 Giải bài toán người đưa thư #include #include #include const max= 20; const vocung=500; struct dothi { int n; int A[max][max]; }; struct dinhbacle { Tiểu luận nhóm 1 Trang 21 Toán ứng dụng Chu trình. .. luận C là chu trình Euler, kết thúc 2.3.2 Thuật toán 2 (Fleury) Tiểu luận nhóm 1 Trang 11 Toán ứng dụng Chu trình Euler và bài toán người đưa thư + Đầu vào Đồ thị G ≠ ∅, không có đỉnh cô lập + Đầu ra Chu trình Euler C của G, hoặc kết luận G không có chu trình Euler + Phương pháp (1) Chọn đỉnh xuất phát bất kỳ v0 Đặt v1 := v0, C := (v0) H := G (2) Nếu H = ∅, thì kết luận C là chu trình Euler, kết thúc... :=v; Tiểu luận nhóm 1 Trang 13 Toán ứng dụng Chu trình Euler và bài toán người đưa thư top :=top-1; End Else // co dinh x ke dinh v Begin // dua dinh x vao stack dong thoi xoa canh (v,x) ra khoi do thi top:=top+1; stack[top]:=x; A[v,x]:=A[x,v]:=0; End End while(top0); // Ham Euler thuc hien trong khi stack chua rong End 2.5 Bài toán người đưa thư 2.5.1 Phát biểu bài toán Bài toán người đưa thư Trung... trình Toán ứng dụng của Thầy giáo PGS.TSKH Trần Quốc Chiến và một số tài liệu liên quan, nhóm chúng tôi thực hiện đề tài Chu trình Euler và bài toán người đưa thư ” đã đạt được những kết quả sau: - Tìm hiểu thuật toán tìm chu trình Euler và thuật toán tìm chu trình ngắn nhất đi qua tất cả các cạnh của một đồ thị cho trước của bài toán người đưa thư - Đề xuất cấu trúc dữ liệu biểu diễn hai bài toán. .. thuật toán bài toán người đưa thư trên ngôn ngữ Pascal Chúng tôi xin chân thành cảm ơn Thầy giáo PGS.TSKH Trần Quốc Chiến đã tận tình giúp đỡ chúng tôi hoàn thành tiểu luận này Do trình độ và thời gian hạn chế nên không tránh khỏi khiếm khuyết, rất mong nhận được sự góp ý của Thầy, Cô và các bạn để tiểu luận được hoàn thiện hơn Tiểu luận nhóm 1 Trang 29 Toán ứng dụng Chu trình Euler và bài toán người đưa. .. liệu và giải thuật tìm đường đi, chu trình Euler Chương trình được thiết kế bằng ngôn ngữ tựa Pascal Cấu trúc dữ liệu: - Biểu diễn đồ thị G bằng cấu trúc dữ liệu bởi một ma trận trọng số Anxn Trong đó n là số đỉnh - Sử dụng một ngăn xếp Stack[max] để lưu các đỉnh đã đi qua Tiểu luận nhóm 1 Trang 12 Toán ứng dụng Chu trình Euler và bài toán người đưa thư - Sử dụng một ngăn xếp CE[max] để lưu chu trình Euler. .. P1[h]ce end; Nối ce1 vào sau ce; End Tiểu luận nhóm 1 Trang 17 Toán ứng dụng Chu trình Euler và bài toán người đưa thư CHƯƠNG III CÀI ĐẶT BÀI TOÁN NGƯỜI ĐƯA THƯ 3.1 Tìm đường đi, chu trình Euler #include #include #include const max= 20; const vocung=32767; struct dothi { int n; int A[max][max]; }; struct stack { int top; int A[max]; }; dothi G; int chuaxet[max]; int m,i,j,sodinh,.. .Toán ứng dụng Chu trình Euler và bài toán người đưa thư Ta áp dụng thuật toán 1 để tìm chu trình Euler (1) Đặt H := G, k := 1, C := ∅, v := f (2) Ta xây dựng chu trình C1 trong H: C1 = (f,g,k,h,i,e,b,c,d,f) Đặt C = C ∪ C1 = (f,g,k,h,i,e,b,c,d,f) (3) Loại C1 ra khỏi H, ta được đồ thị H như sau a j e f b i h g k d c k là các đỉnh cô lập, vì thế ta loại chúng ra khỏi H và nhận Các đỉnh c và được... dodaimin=dodai; Tiểu luận nhóm 1 Trang 24 Toán ứng dụng Chu trình Euler và bài toán người đưa thư } } else { //printf(" hoanvi kh"); for (j=1;j. xin trình bày về Chu trình Euler và bài toán người đưa thư. Đồng Hới, tháng 05 năm 2012 Tiểu luận nhóm 1 Trang Toán ứng dụng Chu trình Euler và bài toán người đưa thư - Đề tài: Chu trình Euler. và giải thuật tìm đường đi, chu trình Euler 12 2.5. Bài toán người đưa thư 14 3.1. Tìm đường đi, chu trình Euler 18 3.2. Giải bài toán người đưa thư 21 Toán ứng dụng Chu trình Euler và bài toán. Nối ce1 vào sau ce; End. Tiểu luận nhóm 1 Trang 17 Toán ứng dụng Chu trình Euler và bài toán người đưa thư CHƯƠNG III. CÀI ĐẶT BÀI TOÁN NGƯỜI ĐƯA THƯ 3.1. Tìm đường đi, chu trình Euler #include #include #include const
Source: https://bem2.vn
Category: Ứng dụng hay