1. Trang chủ
  2. » Luận Văn - Báo Cáo

do thi trong ngon ngu psan

39 7 0

Đ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

Cấu trúc

  • Giới Thiệu

  • Cài đặt và ứng dụng của bài toán đồ thị

    • For vV do

      • Begin

        • Begin

      • Begin

  • Kết luận

  • Tài liệu tham khảo

Nội dung

Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= Lời mở đầu Pascal đợc xem ngôn ngữ lập trình chơng trình giảng dạy tin học trờng đại học phổ thông trung học nay, tính đơn giản dễ học Tuy nhiên để viết chơng trình giải toán ngôn ngữ Pascal, lập trình viên biết rõ ngôn ngữ này, mà yêu cầu không phần quan trọng phải nắm đợc hớng giải toán Em chân thành cảm ơn giúp đỡ tận tình Thầy giáo hớng dẫn: Ts: Phạm Quang Trình thầy giáo khoa Công Nghệ Thông Tin bạn lớp đà giúp đỡ đóng góp ý kiến để em hoàn thành tiểu luận Vinh, ngày 05 tháng 05 năm 2007 Sinh viên thực Trần Đình Thành Lớp 43E2 - CNTT =================================== =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= Phần I Giới Thiệu Lý thuyết đồ thị lĩnh vực nghiên cứu đà có từ lâu có nhiều ứng dụng đại Những t tởng lý thuyết đồ thị đợc đề xuất vào năm đầu kỷ 18 nhà toán học lỗi lạc ngời Thuỵ sỹ Leonhard Euler Chính ông ngơi sử dụng đồ thị để giải toán tiếng cầu thành phố Konigsberg Đồ thị đợc sử dụng để giải toán nhiều lĩnh vực khác Chẳng hạn, đồ thị sử dụng để xác định mạch vòng vấn đề giải tích mạch điện Chúng ta phân biệt hợp chất hoá học hữu khác với công thức phân tử nhng khác cấu trúc phân tử nhờ đồ thị Chúng ta xác định xem hai máy tính mạng trao đổi thông tin đợc với hay không nhờ mô hình đồ thị mạng máy tính Đồ thị có trọng số cạnh sử dụng để giải toán nh: Tìm đờng =================================== =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= ngắn hai thành phố mạng giao thông Chúng ta cũngcòn sử dụng đồ thị để giải toán lập lịch, thời khoá biểu, phân bố tần số cho trạm phát truyền hình Đồ thị cấu trúc rời rạc bao gồm đỉnh cạnh nối đỉnh Chúng ta phân biệt loại đồ thị khác kiểu số lợng cạnh nối hai đỉnh đồ thị Để hình dung đợc lại cần đến loại đồ thị khác tiểu luận chuyên ngành xây dựng ba dạng toán liên quan đến đồ thị: Bài toán tìm kiếm đồ thị Bài toán Cây khung đồ thị Bài toán đờng ngắn =================================== =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= Phần II Cài đặt ứng dụng toán đồ thị Chơng 1: Các thuật toán tìm kiếm đồ thị Rất nhiều thuật toán đồ thị đợc xây dựng dựa sở duyệt tất đỉnh cảu đồ thị cho đỉnh đợc viếng thăm lần Vì việc xây =================================== =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= dựng thuật toán cho phép duyệt cách hệ thống tất đỉnh đồ thị vấn đề quan trọng thu hút quan tâm nghiên cứu nhiều tác giả Những thuật toán nh gọi thuật toán tìm kiếm đồ thị Các thuật toán giữ vai trò quan trọng việc thiết kế thuật toán đồ thị Trong nội dung toán giới thiệu hai thuật toán tìm kiếm đồ thị: Thuật toán tìm kiếm theo chiều sâu (Depth First Search) Thuật toán tìm kiếm theo chiều rộng (Breadth First Search) 1.1 Tìm kiếm theo chiều sâu đồ thị ý tởng thuật toán trình bày nh sau Ta bắt tìm kiếm từ đỉnh v0 đồ thị Sau ®ã chä u lµ mét ®Ønh t ý kỊ víi v lặp lại trình u giả sử ta xét đỉnh v Nếu nh số đỉnh kề với v tìm đợc đỉnh w cha đợc xét ta xét đỉnh ta tiếp tục trình tìm kiếm Còn nh không đỉnh kề với v cha xét ta nói đỉnh đà duyệt xong quay lại tiếp tục tìm kiếm từ đỉnh mà trớc ta đến đợc đỉnh v Nếu =================================== =================================== =============================== Trần Đình Thµnh – Líp 43E2- CNTT – Khoa CNTT – Trêng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= v=v0 kết thúc tìm kiếm Quá trình mô tả thủ tục đệ quy nh sau Procedure DFS(v); Begin Thăm đỉnh(v); Chuaxet[v]:=false; For u Ke(v) If Chuaxet[u] then DFS(u); End; Khi đó,tìm kiếm theo chiếu sâu đồ thị đợc thực nhờ thuật toán sau: Begin For vV Chuaxet[v]:=true; For vV If Chuaxet[v] then DFS(v); End Râ rµng lƯnh gäi DFS(v) sÏ cho phép đến thăm tất đỉnh thuộc thành phần liên thông với đỉnh v, sau thăm đỉnh lệnh gọi đến thủ tục DFS tất đỉnh kề với Mặt khác, thăm đỉnh v xong, biến Chuaxet[v] đợc đặt lại giá trị false nên =================================== =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= đỉnh đợc thăm lần Thuật toán lần lợt tiến hành tìm kiếm đỉnh cha đợc thăm, vậy, xét qua tất đỉnh đồ thị 1.2 Tìm kiếm theo chiều rộng đồ thị Tìm kiếm theo chiều rộng đồ thị, đợc xây dựng dựa sở thay ngăn xếp (STACK) hàng đợi (QUEUE) Với cải biên nh vậy, đỉnh đợc thăm sớm ®· dut xong Mét ®Ønh sÏ trë thµnh ®· dut xong sau ta xét xong tất đỉnh kề với Thủ tục mô tả nh sau Procedure BFS(v); Begin QUEUE := ; QUEUE  v; Chuaxet[v]:= false; While QUEUE   Begin P  QUEUE; For u  Ke(p) If Chuaxet[u] then Begin QUEUE  u; Chuaxet[u]:= false; =================================== =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= End; End; End; Khi đó, tìm kiếm theo chiều rộng đồ thị đợc thực nhờ thuật toán sau: Begin For v  V Chuaxet[v]:= true; For v  V If Chuaxet[v] then BFS(v); End 1.3 T×m đờng kiểm tra tính liên thông Trong mục ta xét ứng dụng thuật toán tìm kiếm môt tả mục trớc vào việc giải hai toán đồ thị: Bài toán tìm đờng toán xác định thành phần liên thông đồ thị a) Bài toán tìm đờng hai đỉnh: Giả sử s t hai đỉnh đồ thị HÃy tìm ®êng ®i tõ s ®Õn t Nh ®· ph©n tÝch, thủ tục DFS(s), BFS(s) cho phép thăm tất đỉnh thuộc thành phần liên thông với s V× vËy sau thùc hiƯn xong thđ tơc, Chuaxet[t]:= =================================== =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= true, điều có nghĩa đờng từ s đến t, Chuaxet[t]:= false t thuộc thành phần liên thông với s, hay nói cách khác: Tồn đờng từ s đến t Trongtrờng hợp tồn đờng đi, để ghi nhận đờng di, ta dùng thêm biến Truoc[v] để ghi nhân đỉnh trớc ®Ønh v ®êng ®i t×m kiÕm tõ s ®Õn v Khi đó, thủ tục DFS(v) cần sữa chữa đổi câu lệnh if nh sau: If Chuaxet[u] then Begin Truoc[u]:= v; DFS(u); End; Còn thủ tục BFS(v) cần sửa đổi câu lệnh if trongnó nh sau: If Chuaxet[u] then Begin QUEUE  u; Chuaxet[u]:= false; Truoc[u]:= p; End; Đờng cần tìm đợc khôi phục theo quy tắc sau: t p1:= Truoc[t]  p2:= Truoc[p1]  …  s =================================== =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= b) Tìm thành phần liên thông cảu đồ thị: HÃy cho biết đồ thị gồm thành phần liên thông thành phần liên thông gồm đỉnh Do thủ tục DFS(s), BFS(s) cho phép thăm tất đỉnh thuộc thành phần liên thông với s, nên số thành phần liên thông đồ thị số lần gọi đến thủ tục Vấn đề lại cách ghi nhận đỉnh thành phần liên thông Ta dùng thêm biến Index[v] để ghi nhận số thành phần liên thông chứa đỉnh v, dùng thêm biến Inconnect để đếm số thành phần liên thông (Biến đợc khởi tạo giá trị 0) Thủ tục Thăm _đỉnh(v) thủ tục DFS(v) BFS(v) có nhiệm vụ gán: Index[v]:= Inconnect, câu lệnh if chơng trình gọi lại đến thủ tục cần đợc sửa lại nh sau: Inconnect:= 0; If Chuaxet[v] then Begin Inconnect:= inconnect + 1; DFS(v); (* BFS(v) *) =================================== 10 =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= If Father[i]>Father[j] then Begin Father[i]:=j; Father[j]:=x; End Else Begin Father[j]:=i; Father[i]:=x; End; End; Procedure Kruskal; Var i,last,u,v,r1,r2,Ncanh,Ndinh:integer; Begin For i:=1 to n father[i]:=-1; For i:=trunc(m/2) downto Heap(i,m); last:=m; Ncanh:=0;Ndinh:=0; MinL:=0; Connect:=true; While (Ndinhd[u]+a[u,v] then Begin d[v]:=d[u]+a[u,v]; Truoc[v]:=u; End; End; End; 3.3 Cài đặt chơng trình Pascal giải hai toán nói =================================== 30 =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= Bài toán: Tìm đờng ngắn từ đỉnh s đến đỉnh t theo thuật toán Dijsktra đồ thÞ Program CT_Menu_DuongDi; Uses Crt; Const m= Var 3; max= 50; Chon_menu: Byte; nd: Array[1 m] of string; a: Array[1 max,1 max] of Byte; b: Array[1 max,1 max] of Integer; d: Array[1 max] of Integer; QUEUE: Array[1 max] of Byte; Chuaxet: Array[1 max] of Byte; Truoc: Array[1 max] of Byte; Final: Array[1 max] of Boolean; n,s,t: Integer; i,j: Integer; Solt,k: Integer; Stop: Boolean; Ch,Chon: Char; {* -*} =================================== 31 =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= Procedure NhapSoLieu_DT; Var f:Text; Fname:String; i,j:Integer; Begin Write('Vao ten File du lieu can doc:');Readln(Fname); Assign(f,Fname); Reset(f); Readln(f,n); For i:= to n For j:= to n Read(f,b[i,j]); Close(f); End; Procedure InSoLieu_DT; Var i,j:Integer; Begin Writeln('So dinh cua thi:'); Writeln('Ma tran khoang cach:'); For i:=1 to n Begin For j:=1 to n Write(b[i,j]:3,''); =================================== 32 =================================== =============================== Trần Đình Thành Lớp 43E2- CNTT Khoa CNTT Trờng đại học Vinh Tiểu luận chuyên ngành - Bài toán đồ thị ngôn ngữ Pascal ==================================== ======================= Writeln; End; End; {* -*} Procedure InKetQua_DT; Var i,j:Integer; Begin Writeln('Duong di ngan nhat tu ',s,' den ',t); Write(t,'

Ngày đăng: 29/08/2021, 15:59

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w