Sinh viờn khi được cung cấp tờn và mật khẩu đăng nhập, cú thể truy cập vào bài giảng từ mỏy tớnh để học tập, tham khảo code của cỏc bài toỏn, nghiờn cứu, tạo và chỉnh sửa cỏc bài học, cũng như tạo diễn đàn trao đổi thảo luận, học tập kinh nghiệm, giỳp đỡ nhau.
PHẦN KẾT LUẬN
Đề tài đó nghiờn cứu về cỏc nội dung của lý thuyết đồ thị được giảng dạy tại trường Đại học Hựng Vương và vận dụng ngụn ngữ lập trỡnh Pascal để xõy dựng cỏc bài giải mẫu cho cỏc vớ dụ điển hỡnh, giỳp cho sinh viờn ngành CNTT thuận lợi trong quỏ trỡnh tiếp thu kiến thức và hiểu rừ hơn về ứng dụng của Lý thuyết đồ thị trong Tin học là cụng cụ đắc lực, là lĩnh vực cú nhiều ứng dụng phục vụ cho nhiều ngành khỏc nhau trong đời sống xó hội. Cú nhiều bài toỏn ứng dụng, nếu được mụ hỡnh tốt bằng đồ thị thỡ sẽ dễ dàng giải quyết được trờn mỏy tớnh, vỡ cấu trỳc và quỏ trỡnh xử lý lữu trữ thụng tin trờn mỏy tớnh cú tớnh chất rời rạc khụng liờn tục mà bản chất của đồ thị cũng là rời rạc. Nằm trong toỏn rời rạc, đồ thị đúng vai trũ quan trọng làm cơ sở toỏn cho tin học, vỡ vậy đề tài được thực hiện khụng chỉ đạt được cỏc kết quả nghiờn cứu về cỏc ứng dụng mà cũn làm sỏng tỏ hơn cơ sở lý thuyết toỏn trong tin học.
Đồng thời cỏc kết quả đạt được trong việc nghiờn cứu cũng giỳp sinh viờn giải cỏc bài toỏn tối ưu, bài toỏn lập lịch, đặc biệt trong cỏc vấn đề về cõy, ở đõy ta tỡm thấy nhiều ứng dụng cho việc phõn tớch cỏc giải thuật, tuy là cơ sở nhưng rất trọng tõm, sự mụ hỡnh hoỏ được cỏc giải thuật bằng cõy tạo được khả năng phõn tớch cỏc thuật toỏn này được rừ nột hơn, nhờ những kết quả nghiờn cứu được từ cõy lại làm rừ hơn bản chất của thuật toỏn.
Ứng dụng của đề tài là thực tiễn và hỗ trợ tốt trong việc giảng dạy và học tập Lý thuyết đồ thị, việc nghiờn cứu lý thuyết đồ thị và cỏc ứng dụng của nú gúp phần phỏt triển cỏc kỹ thuật Tin học, đặc biệt trong khõu lập trỡnh. Hướng phỏt triển tiếp theo cần nghiờn cứu toàn diện hơn về đồ thị và những ứng dụng quan trọng và phổ biến của đồ thị, vỡ cỏc vấn đề ứng dụng của đồ thị là rất rộng cần nhiều thời gian và tõm huyết của những độc giả quan tõm.
PHỤ LỤC: MỘT SỐ GIẢI THUẬT ĐIỂN HèNH
{Tỡm số đường đi độ dài cho trước của một đồ thị} Type MaTran = Array[1..20,1..20] Of Integer; Var a,b,aa: MaTran;
n,l,x1,x2: Integer;
Procedure InputMt(Var Mt: Matran); Var i,j: Integer;
Begin For i:=1 to n do For j:=1 to n do Begin Write('a',i,j,'= '); Readln(Mt[i,j]); End; End;
Procedure Gan(Mt1: MaTran; Var Mt2: MaTran); {Mt2 <-- Mt1} Var i,j:Integer; Begin For i:=1 to n do For j:=1 to n do Mt2[i,j]:=Mt1[i,j]; End;
Procedure TichMt(mt1,mt2: Matran; Var MtKq: MaTran); { MtKq = Mt1*Mt2 }
Var i,j,k: Integer; Begin For i:=1 to n do For j:=1 to n do Begin MtKq[i,j]:=0; For k:=1 to n do MtKq[i,j]:=MtKq[i,j]+Mt1[i,k]*Mt2[k,j]; End; End;
Procedure LthuaMt(m: Integer); {aa = a ^m (m: do dai duong di, m>=2) } Var i: Integer; Begin Gan(a,b); For i:=1 to m-1 do Begin TichMt(b,a,aa); Gan(aa,b); End; End;
Procedure FindWay(i,j: Integer); { Tim so duong di tu dinh i-->j } Begin
If aa[i,j]<>0 then
Writeln('So duong di do dai ',l,' tu x',x1,' --> ','x2 ','la: ',aa[i,j]) Else
Writeln('Khong co duong di tu dinh ',i,' toi dinh ',j,' voi do dai ',l); Readln;
End; BEGIN ClrScr;
Writeln('Nhap ma tran ke cho do thi:'); Write('So dinh do thi: '); Readln(n); InputMt(a);
Write('Dinh xuat phat: '); Readln(x1); Write('Dinh ket thuc: '); Readln(x2); Write('Do dai duong di: '); Readln(l); LthuaMt(l);
FindWay(x1,x2); END.
Thuật toỏn Dijkstra
{ Chuong trinh tim duong di ngan nhat di dinh s den dinh t theo thuat toan Dijkstra}
Uses Crt; Const Max = 7;
Var a: Array[1..Max, 1..Max] Of Integer; n,s,t: Integer;
d, Truoc : Array[1..Max] Of Integer; MinOk : Array[1..Max] of Boolean; Procedure NhapSoLieu;
Var f: Text; Fname: String; i,j: Integer; Begin
{ Write('Vao ten file du lieu can doc: '); Readln(Fname);} Assign(f,'dstra1.dt'); Reset(f); Readln(f,n); For i:=1 to n do For j:=1 to n do Read(f,a[i,j]); Close(f); End; Procedure InSoLieu; Var i,j: Integer; Begin
Writeln('So dinh cua do thi: ',n); Writeln(' Ma tran khoang cach: '); For i:=1 to n do Begin
For j:=1 to n do Write(a[i,j]:3,' '); Writeln;
End; End;
Procedure Dijkstra; Var u,v,Mind: Integer; Begin
Write(' s = '); Readln(s); Write(' t = '); Readln(t);
{---Khoi tao cac gia tri---} For v:=1 to n do Begin
d[v] := MaxInt; { Khoi tao cac d(s,v)} MinOk[v]:= False;
Truoc[v]:=n +1; End;
d[s]:=0;
MinOk[s]:=True;
u:=s; {Buoc dau dinh goc la hat nhat cho dieu chinh}
{---Tim duong di ngan nhat---} While not MinOk[t] do Begin
{Xac lap va dieu chinh d(s,u)}
For v:=1 to n do if not MinOk[v] then
if (a[u,v]<>0) and (d[u] + a[u,v] < d[v]) Then Begin d[v] := d[u] + a[u,v];
Truoc[v]:= u; {Nho duong di ngan nhat} End;
{Tim dinh u co d(s,u) la min} Mind:=MaxInt;
For v:=1 to n do
If (not MinOk[v]) And (Mind>d[v]) then Begin Mind := d[v];
u:= v; End;
MinOk[u] := True;
If Mind = MaxInt then Break; {Tac duong} End;
End;
Procedure Result; Var i: Integer; Begin
i:=Truoc[t];
If i = n + 1 then Begin
Writeln('Khong ton tai duong di tu ',s,' den ',t); Exit
End;
Write(t,'<=');
While i<>s do Begin Write(i,'<=');
i:=Truoc[i]; End;
Writeln(s);
Writeln('Do dai cua duong di la: ',d[t]); Readln;
End;
BEGIN {Main program} ClrScr; NhapSoLieu; InSolieu; Dijkstra; Result; END.
Thuật toỏn Ford_Bellman
{ Tim duong di ngan nhat theo thuat toan Ford_Bellman tu 1 dinh xuat phat toi tat ca cac dinh con lai}
Uses Crt; Const Max = 8; Var
an,c : Array[1..Max, 1..Max] of Integer; d,Truoc: Array[1..Max] of Integer; n,s: Integer;
Procedure NhapSoLieu; Var f: Text;
i,j: Integer; Begin ClrScr;
{ Write('Vao ten file du lieu can doc: '); Readln(Fname);} Assign(f,'dstra1.dt'); Reset(f); Readln(f,n); For i:=1 to n do For j:=1 to n do Read(f,c[i,j]); Close(f); End; Procedure InDulieu; Var i,j: Integer; Begin
ClrScr;
Writeln('Ma tran ke cua do thi: '); For i:=1 to n do Begin
Writeln; For j:=1 to n do Write(c[i,j]:9); End; Readln; End; Procedure Ford_Bellman; Var k,i,j: Integer;
Begin
Write('Dinh xuat phat: '); Readln(s);
{---Khoi tao cac gia tri---} For i:=1 to n do Begin
If c[s,i]<>0 then Begin d[i]:=c[s,i];
End
Else d[i]:=MaxInt; Truoc[i]:=s;
End;
For k := 1 to n-2 do For i := 1 to n do if i<>s then
For j:=1 to n do Begin
If (c[j,i]<>0) and (d[j]<>MaxInt) and (d[i] > d[j] + c[j,i]) then Begin d[i] := d[j] + c[j,i]; Truoc[i]:=j; End; End; End; Procedure Result; Var i,x: Integer; Begin
{In duong di ngan nhat tu dinh s toi dinh i} For i:= 1 to n do if i<>s then Begin
Write(i,'<-'); x:= Truoc[i]; While x<>s do Begin Write(x,'<-'); x := Truoc[x]; End; Writeln(s); End; Readln; End; BEGIN NhapSoLieu; indulieu; Ford_Bellman; Result; END.
Thuật toỏn Ployd
{ Tim duong di ngan nhat giua cac cap dinh theo thuat toan ployd} Uses Crt;
Const Max = 10; Var
an,c,p : Array[1..Max, 1..Max] of Integer; n: Integer; Procedure NhapSoLieu; Var f: Text; Fname: String; i,j: Integer; Begin ClrScr;
{ Write('Vao ten file du lieu can doc: '); Readln(Fname);} Assign(f,'dstra1.dt'); Reset(f);
Readln(f,n); For i:=1 to n do
For j:=1 to n do Begin Read(f,c[i,j]);
If (c[i,j] = 0) and (i<>j) then an[i,j]:= maxint Else an[i,j]:= c[i,j];
p[i,j] := 0; End; Close(f); End;
Procedure InDulieu; Var i,j: Integer; Begin
Writeln('Ma tran ke cua do thi: '); For i:=1 to n do Begin
Writeln;
For j:=1 to n do Write(c[i,j]:9); End;
Readln; End;
Var i,j,k: Integer; Begin
For k:=1 to n do For i:=1 to n do For j:=1 to n do
if (an[i,k] <> MaxInt ) and (an[k,j] <> MaxInt)then if an[i,k] + an[k,j] < an[i,j] then Begin
an[i,j]:= an[i,k] + an[k,j]; p[i,j] := k;
End; End;
Procedure Result; Var i,j: Integer;
{In duong di ngan nhat giua cap dinh (a,b) tu ma tran p[i,j]} Procedure MinimumWay(a,b: Integer);
Var k: Integer; Begin k:= p[a,b]; If k = 0 then Exit; MinimumWay(a,k); Write(k,'->'); MinimumWay(k,b); End; Begin
Writeln; Writeln('Do dai duong di ngan nhat giua cac cap dinh: '); For i:=1 to n do Begin
Writeln;
For j:=1 to n do Write(an[i,j]:9); End;
Readln;
Writeln('Duong di ngan nhat giua cac cap dinh: '); For i:=1 to n do Begin
For j:=1 to n do if i<> j then Begin Write(i,'=>',j,': ');
Write(i,'->'); MinimumWay(i,j); Write(j); Writeln;
End;
Writeln('Press Enter to continue...'); Readln; End; Readln; End; BEGIN NhapSoLieu; Indulieu; Ployd; Result; END. Cõy biểu thức
{ Chuong trinh mo phong cay bieu thuc nhi nguyen, voi phuong phap duyet tien thu tu}
Uses Crt;
Type StrArr = Array[1..100] Of String[10]; Var Day: StrArr;
i,n,Code: Integer; Num: Real;
Function Tinh(k: Char; x, y: Real): Real; Var t: Real; Begin Case k of '*' : t:= x * y; '/': t:= x/y; '+': t:= x + y; '-': t:= x - y;
Else Writeln('Ban nhap sai'); End;
Procedure Input(Var xau: StrArr; Var D:Integer); Var x,y: Integer;
Begin
Writeln('Nhap day cho cay bieu thuc theo phuong phap tien thu tu');
Writeln('moi lan nhap 1 phan tu bam Enter, bam tiep Enter lan nua khi ket thuc');
Writeln('Vi du day: * - 5 2 3 la cho bieu thuc: (5 - 2) * 3 '); x:=2; Gotoxy(x,5); Write('Input: '); x:= 9;
d:=1;
Readln(xau[d]);
While Xau[d]<>'' do Begin
x:= x + length(xau[d]) + 1; Inc(d); Gotoxy(x,5); Readln(xau[d]); End;
d:=d - 1; End;
{Thu tuc cho cay bieu thuc} Function Value(k: Char): Real; Var a, b: Real;
Begin
Inc(i); Val(Day[i],a,Code);
If Code <> 0 then a:= Value(day[i][1]); {Neu khong phai la la} Inc(i); Val(Day[i],b,Code);
If Code <> 0 then b:= Value(day[i][1]); Value:= Tinh(k,a,b);
End; Begin ClrScr; Input(day,n);
i:=1; Num := Value(Day[i][1]);
Writeln('Gia tri bieu thuc la: ',Num:8:3); Readln;
Sắp xếp với tỡm kiếm nhị phõn
{Sap xep 1 danh sach bang phuong phap chen nhi phan} Uses Crt;
Const n = 9;
Ds : Array[1..n] of Integer = (1,9,1,6,3,10,10,8,7);
{Ham tra lai vi tri dung cua Pt trong danh sach} Function FindNp(l,r,Pt: Integer): Integer;
Var t: Integer; Begin
Clrscr;
If Pt<=Ds[l] then FindNp:=l
Else If Pt>=Ds[r] then FindNp:= r + 1 Else Begin
Repeat
t:= (l + r) div 2;
If Pt = ds[t] then Begin FindNp:=t+1; Exit End Else If Pt<ds[t] then r:=t Else l:=t; Until r=l+1; FindNp:=l+1; End; End;
Var i,j,vt,s: Integer; Begin
For i:=2 to n do Begin vt:= FindNp(1,i-1,ds[i]);
{Chen dung vi tri sao cho ds luon duoc sap xep} s:=ds[i];
For j:=i-1 Downto vt do ds[j+1]:=ds[j]; ds[vt]:=s;
End;
End. Sắp xếp nhanh program QSort; {$R-,S-} uses Crt; const Max = 10; type
List = array[1..Max] of Integer; var
Data: List; I: Integer;
procedure QuickSort(var A: List; Lo, Hi: Integer); procedure Sort(l, r: Integer);
var i, j, x, y: integer; begin i := l; j := r; x := a[(l+r) DIV 2]; repeat while a[i] < x do i := i + 1; while x < a[j] do j := j - 1; if i <= j then begin
y := a[i]; a[i] := a[j]; a[j] := y; i := i + 1; j := j - 1; end; until i > j; if l < j then Sort(l, j); if i < r then Sort(i, r); end; begin {QuickSort}; Sort(Lo,Hi); end;
begin {QSort}
Write('Now generating 10 random numbers...'); Randomize;
for i := 1 to Max do Data[i] := Random(3000); Writeln;
Write('Now sorting random numbers...'); QuickSort(Data, 1, Max);
Writeln;
for i := 1 to 10 do Write(Data[i]:5); end.
Tỡm cõy bao trựm theo chiều sõu và chiều rộng
{Tim cay bao trum cua do thi bang chieu sau va chieu rong} Uses Crt;
Var mG,mT : Array[1..100,1..100] of Integer; {mG: mt ke cua do thi G
mT: mt ke cua cay bao trum cho dt G} n: Integer;
ChuaXet: Array[1..100] Of Boolean; Queue: Array[1..100] of Integer; tl: Char;
{Nhap du lieu cho do thi} Procedure NhapDl;
Var i,j: Integer; Begin
{Nhap du lieu cho do thi G} Write('So dinh: '); Readln(n); For i:=1 to n do Begin
ChuaXet[i]:=True; Queue[i]:=0;
For j:=i+1 to n do Begin
Write('a',i,j,' = '); Readln(mG[i,j]); mG[j,i]:=mG[i,j];
End;
mG[i,i]:=0; End;
For i:=1 to n do
For j:=1 to n do mT[i,j]:=0; End;
{Hien thi ket qua} Procedure Display; Var i,j: Integer; Begin
Writeln('Ma tran ke cua do thi'); For i:=1 to n do Begin
For j:=1 to n do Write(mG[i,j]:3); Writeln;
End; Writeln;
Writeln('Ma tran ke cua cay bao trum'); For i:=1 to n do Begin
For j:=1 to n do Write(mT[i,j]:3); Writeln;
End; End;
{Thu tuc tim cay bao trum theo chieu sau} Procedure Dfs(v: Integer);
Var u: Integer; Begin
ChuaXet[v]:=False; {Dinh v da duoc tham} For u:=1 to n do
If (mG[v,u]<>0) and (ChuaXet[u]) then Begin {Duyet nhung canh ke voi v} mT[v,u]:=mG[v,u]; {Bo sung vao tap canh cua cay}
mT[u,v]:=mT[v,u]; Dfs(u);
End; End;
Procedure Bfs(v: Integer); Var i,u,First,Last: Integer; Begin
First:=1; Last:=1; Queue[Last]:=v;
ChuaXet[v]:=False; {Dinh v da duoc tham}
While First<=Last do Begin {Trong khi hang doi chua rong} u:=Queue[First]; Inc(First);
For i:=1 to n do
If (mG[u,i]<>0) and (ChuaXet[i]) then Begin {Duyet nhung canh ke voi v} mT[u,i]:=mG[u,i]; {Bo sung vao tap canh cua cay}
mT[u,i]:=mT[i,u]; ChuaXet[i]:=False; Inc(Last); Queue[Last]:=i; End; End; End; BEGIN ClrScr; NhapDl;
Write('Chon chieu sau hay chieu rong (s/r)? '); Readln(tl); If Upcase(tl) = 'S' then Dfs(1)
Else Bfs(1); Display; Readln; END.
{ Thuật toỏn Kruskal} Uses Crt;
Type
Edges = Array[1..100] of Record First, Last,
Weight: Integer; End;
i,j,n,m,t,lt: Integer;
Father: Array[1..100] of Integer;
{File du lieu o dang danh sach canh (cung)} Procedure Input;
Var f: Text; Fname: String; i: Integer; Begin
Write('Ten file: '); Readln(Fname); Assign(f,Fname); Reset(f);
Readln(f,n,m);
For i:=1 to m do With Canh[i] do Readln(f,First,Last,Weight); Close(f);
End;
Procedure DisPlay; Var i: Integer; Begin
For i:=1 to m do With Canh[i] do Writeln(First,' ',Last,' ',Weight); End;
{Sap xep lai cac canh theo trong so} Procedure SortEdges;
Var i,j: Integer; Begin
For i:=1 to m - 1 do For j:= i+1 to m do
If Canh[i].Weight>Canh[j].Weight then Begin Canh[m+1]:=Canh[i];
Canh[i]:=Canh[j]; Canh[j]:=Canh[m+1]; End;
End;
{Tim goc cua cay con co chua dinh i} Function Find(i: Integer): Integer;
Var Tro: Integer; Begin
Tro:=i;
While Father[Tro]>0 do Tro:=Father[Tro]; Find:= Tro;
End;
{Ghộp 2 cõy con thành cõy con mới} Procedure Merge(i, j : Integer); Var x: Integer;
Begin
x:=Father[i] + Father[j];
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,r1,r2,u,v: Integer; Begin
For i:=1 to n do Father[i] := -1; i:=1; t:=0; lt:=0;
While (i<=m) And (t<= n -1) do Begin
r1:=Find(Canh[i].First); {Tim goc cay con dinh dau} r2:=Find(Canh[i].Last); {Tim goc cay con dinh cuoi}
If r1 <> r2 then Begin {Neu canh[i] khong lap thanh chu trinh} Inc(t);
TCanh[t]:=Canh[i]; {ket nap canh moi vao cay khung nho nhat} lt:= lt + Canh[i].Weight;
Merge(r1,r2); {Ghep 2 cay con} End;
End; End; Procedure Result; Var i: Integer; Begin Writeln;
If t< n -1 then Writeln('Khong co cay bao trum nho nhat') Else Begin
Writeln('Cay bao trum ngan nhat la: '); For i:=1 to t do With Tcanh[i] do Writeln(First,' ',Last,' ',Weight); Write('Chieu dai cay: ',lt); End;
End; BEGIN ClrScr;
Input; SortEdges; Display; Kruskal; Result;
Readln; END.
TÀI LIỆU THAM KHẢO
1. Nguyễn Cam - Chu Đức Khỏnh (1999), Lý thuyết đồ thị, NXB Tp Hồ Chớ Minh.
2. Đỗ Đức Giỏo (1999), Toỏn rời rạc, NXB Đại Học Quốc gia Hà nội. 3. Đỗ Đức Giỏo (1998), Cơ sở toỏn trong lập trỡnh, NXB Khoa học và Kỹ thuật, Hà Nội.
4. Nguyễn Đức Nghĩa - Nguyễn Tụ Thành (1999), Toỏn rời rạc, NXB Giỏo Dục.
5. Đỗ Xuõn Lụi (1999), Cấu trỳc dữ liệu và giải thuật, NXB thống kờ.
6. Nguyễn Xuõn Quỳnh, Cơ sở Toỏn rời rạc và ứng dụng, NXB Giỏo dục Hà Nội.
7. Kenneth H.Rosen
Discrete Mathematics And Its Applications.
Bản dịch tiếng Việt: Toỏn học rời rạc ứng dụng trong Tin học NXB Khoa Học và Kỹ Thuật, Hà Nội 1998.
MỤC LỤC
MỞ ĐẦU...2
1. Lý do chọn đề tài...2
2. Mục tiờu đề tài ...2
3. Đối tượng, phạm vi nghiờn cứu...3
3.1 Đối tượng nghiờn cứu...3
3.2 Phạm vi nghiờn cứu...3
4. Phương phỏp nghiờn cứu...3
PHẦN 1: Lí THUYẾT ĐỒ THỊ...4
CHƯƠNG 1: ĐẠI CƯƠNG VỀ ĐỒ THỊ...4
1.1. Khỏi niệm ...4
1.1.1. Đồ thị...4
1.1.2. Cỏc dạng đồ thị...4
1.1.3. Cỏc khỏi niệm liờn quan...7
1.2. Biểu diễn đồ thị...9 1.2.1. Ma trận kề...9 1.2.2. Ma trận liờn thuộc...10 1.2.3. Danh sỏch cạnh...10 1.2.4. Danh sỏch kề...11 1.3. Đồ thị phẳng...11 1.3.1. Khỏi niệm...11 1.3.2. Cụng thức EULER...12 1.3.3. Định lớ Kuratowski...12
CHƯƠNG 2: CÁC BÀI TOÁN VỀ ĐƯỜNG ĐI...13
2.1. Đồ thị Euler...13
2.1.1. Khỏi niệm...13
2.1.2. Thuật toỏn tỡm chu trỡnh Euler...14
2.2. Tỡm đường đi trong mờ cung...15
2.2.1. Bài toỏn...15
2.2.2. Thuật toỏn...15
2.2.2.1. Thuật toỏn loang...15
2.2.2.2. Thuật toỏn thử - quay lui...15
2.3. Tỡm đường đi ngắn nhất...16
2.3.1. Phỏt biểu bài toỏn ...16
2.3.2. Thuật toỏn Dijkstra...16
2.3.2. Thuật toỏn Floyd...18
2.4. Đồ thị Hamilton...19
2.4.1. Khỏi niệm...19
2.4.2. Thuật toỏn tỡm chu trỡnh Hamilton...21
2.4.3. Mó Gray...22
CHƯƠNG 3: CÂY...23
3.1. Khỏi niệm cõy...23
3.2. Tớnh chất của cõy...23
3.3. Cỏc khỏi niệm liờn quan...25
3.4. Cõy phủ...26
3.4.1. Khỏi niệm ...26
3.4.2. Xõy dựng cõy phủ của đơn đồ thị vụ hướng...26
3.4.2.2. Duyệt theo chiều rộng...27
3.4.3. Nhận xột...28
3.5. Cõy phủ nhỏ nhất...29
3.5.1. Phỏt biểu bài toỏn...29
3.5.2. Thuật toỏn Kruskal...30
3.5.2.1. í tưởng thuật toỏn...30
3.5.2.2. Cài đặt thuật toỏn...30
3.5.2.3. Chứng minh thuật toỏn và đỏnh giỏ độ phức tạp...31
3.5.3. Thuật toỏn Prim...32
3.5.3.1. í tưởng thuật toỏn...32
3.5.3.2. Cài đặt thuật toỏn...33
3.6. Cõy nhị phõn tỡm kiếm...34
3.6.1. Khỏi niệm...34
3.6.2. Giải thuật tỡm kiếm...34
3.6.3. Phõn tớch và đỏnh giỏ độ phức tạp...35 3.6.4. Thờm nỳt mới...35 3.6.5. Loại bỏ nỳt...37 3.7. Cõy quyết định...38 CHƯƠNG 4: MẠNG...40 4.1. Định nghĩa...40
4.2. Luồng cực đại và lỏt cắt cực tiểu...41
4.2.1. Phỏt biểu bài toỏn...41
4.2.2. Lỏt cắt cực tiểu...41
4.3. Bài toỏn ghộp cặp...44
4.3.1. Khỏi niệm...44
4.3.2. Phỏt biểu bài toỏn...44
CHƯƠNG 5: BÀI TOÁN Tễ MÀU...45
5.1. Bài toỏn...45
5.2. Định lớ về sắc số...45
5.3. Cỏc bài toỏn ứng dụng...46
5.3.1. Bài toỏn lập lịch thi...46
5.3.2. Bài toỏn phõn chia kờnh truyền hỡnh...46
5.4. Bài toỏn tụ màu cạnh...46
PHẦN 2: XÂY DỰNG CHƯƠNG TRèNH GIẢI MỘT SỐ BÀI TOÁN ĐIỂN HèNH BẰNG PASCAL ...48