Professional Documents
Culture Documents
cng ni l ni nh u v nh v, ng thi cc nh u v v s c gi l cc nh u ca
cnh (u, v).
c th bit c bao nhiu cnh lin thuc vi mt nh, ta a vo nh ngha sau
nh ngha 2.2
Ta gi bc ca nh v trong th v hng l s cnh lin thuc vi n v s k hiu l
deg(v).
Th d 1.
Xt th cho trong hnh 1, ta c
deg(v) = 2m=2 E
vV
vO
vU
vO
Th d 3.2
Xt th cho trong hnh 2. Ta c
deg
vV
Khi nim ng i v chu trnh trn th c hng c nh ngha hon ton tng t
nh trong trng hp th v hng, ch khc l ta c ch n hng trn cc cung.
nh ngha 2.3
ng i di n t nh u n nh v, trong , n l s nguyn dng, trn th c
hng G = (V, E) l dy x0, x1,, xn-1, xn
trong u = x0, v = xn, (xi, xi+1) E, i = 0, 1, 2,, n-1.
ng i ni trn cn c th biu din di dng dy cc cung:
4
a. th y .
th y n nh, k hiu bi Kn, l n th v hng m gia hai nh bt k ca n
lun c cnh ni.
Cc th K3, K4, K5 cho trong hnh di y.
d. th lp phng.
th lp phng n nh Qn l th vi cc nh biu din 2n xu nh phn di n . Hai
nh ca n k nhau nu nh hai xu nh phn tng ng ci khc nhau 1 bit .
Th d:
( Hnh -4)
Hai th ny ng cu nh php tng ng nh -cnh di y :
f1(1)=a,f1(2)=b,f1(3)=c, f1(4)=d
g1(u1)=e 1 , g1(u2)=e2 , g1(u3)=e3 g1(u4)= e4 , g1(u5) = e5 , g(u6)=e6
Hin nhin, nu hai th ng hnh ( hay ng phi) vi nhau th chng phi c :
-
Cng s nh
Cng s nh bc k , k nguyn 0
Cng s cnh
v,uV, vu E vuE
g. Tp n nh ca th
g.1. Tp n nh trong
Cho th G=(V,E) .Tp con A V c gi l tp n nh trong ca G nu mi cp nh
thuc A u khng k nhau ( khng c cnh hoc cung ni chng )
Tp n nh trong cc i : L tp n nh trong khng th thm nh no na . S phn
t ca tp n nh trong cc i nhiu phn t nht l s n nh trong . K hiu (G)
Nhn xt : Mi tp con ca n nh trong cng l tp n nh trong .
b) Cch tm tp n nh trong
Hnh - 5
h. Tp nhn ca th .
Nhn ca th l mt tp mt s nh va l tp n nh trong va l tp n nh ngoi .
i. TH PHNG.
i.1.nh ngha 1: Mt th c gi l phng nu n c th v c trn mt mt phng
m khng c cc cnh no ct nhau ( mt im khng phi l im mt ca cc cnh).
Hnh v nh th gi l mt biu din phng ca th.
9
Hnh -a
Hnh -b
Th d 2: 1) Mt cy ch c mt min, l
min v hn.
2) th phng hnh bn c 5 min, M5
l min v hn, min M1 c bin abgfa,
min M2 c bin l bcdhgb, Chu
trnh n abcdhgfa khng gii hn mt
min v cha bn trong n chu trnh n
khc l abgfa.
10
11
th G l ng phi vi th G.
Nh ton hc Ba Lan, Kuratowski, thit lp nh l sau y vo nm 1930. nh
l ny biu th c im ca cc th phng nh khi nim th ng phi.
j.3.nh l (Kuratowski): th l khng phng khi v ch khi n cha mt th con
ng phi vi K3,3 hoc K5.
Th d 4:
12
k. T MU TH.
k.1. T mu bn :
Mi bn c th coi l mt th phng. Trong mt bn , ta coi hai min c
chung nhau mt ng bin l hai min k nhau (hai min ch c chung nhau mt im bin
khng c coi l k nhau). Mt bn thng c t mu, sao cho hai min k nhau
c t hai mu khc nhau. Ta gi mt cch t mu bn nh vy l mt cch t mu
ng.
m bo chc chn hai min k nhau khng bao gi c mu trng nhau, chng ta
t mi min bng mt mu khc nhau. Tuy nhin vic lm ni chung l khng hp l.
Nu bn c nhiu min th s rt kh phn bit nhng mu gn ging nhau. Do vy
ngi ta ch dng mt s mu cn thit t bn . Mt bi ton c t ra l: xc nh
s mu ti thiu cn c t mu ng mt bn .
Th d 5: Bn trong hnh bn c 6 min,
nhng ch cn c 3 mu (vng, , xanh)
M3
M4
M1
t ng bn ny. Chng hn, mu vng
M2
c t cho M1 v M4, mu c t cho M2
M5
M6
v M6, mu xanh c t cho M3 v M5.
k.2. T mu th:
Mi bn trn mt phng c th biu din bng mt th, trong mi min ca
bn c biu din bng mt nh; cc cnh ni hai nh, nu cc min c biu din
bng hai nh ny l k nhau. th nhn c bng cch ny gi l th i ngu ca
bn ang xt. R rng mi bn trn mt phng u c th i ngu phng. Bi ton
t mu cc min ca bn l tng ng vi bi ton t mu cc nh ca th i
ngu sao cho khng c hai nh lin k nhau c cng mt mu, m ta gi l t mu ng cc
nh ca th.
S mu t nht cn dng t mu ng th G c gi l sc s ca th G v
k hiu l (G).
Th d 6:
13
Nh vy (G) = 4.
k.3. Mnh : Nu th G cha mt th con ng phi vi th y Kn th (G)
n.
Chng minh: Gi H l th con ca G ng phi vi Kn th (H) n. Do (G) n.
k.4. Mnh : Nu n th G khng cha chu trnh di l th (G) =2.
Chng minh: Khng mt tnh cht tng qut c th gi s G lin thng. C nh nh u ca
G v t n bng mu 0 trong hai mu 0 v 1. Vi mi nh v ca G, tn ti mt ng i t
u n v, nu ng ny c di chn th t mu 0 cho v, nu ng ny c di l th t
mu 1 cho v. Nu c hai ng i mang tnh chn l khc nhau cng ni u vi v th d thy
rng G phi cha t nht mt chu trnh di l. iu mu thun ny cho bit hai mu 0 v
1 t ng th G.
k.5. Mnh : Vi mi s nguyn dng n, tn ti mt th khng cha K3 v c sc s
bng n.
Chng minh: Ta chng minh mnh bng quy np theo n.
Trng hp n=1 l hin nhin.
Gi s ta c th Gn vi kn nh, khng cha K3 v c sc s l n. Ta xy dng
th Gn+1 gm n bn sao ca Gn v thm knn nh mi theo cch sau: mi b th t (v1, v2,
, vn), vi vi thuc bn sao Gn th i, s tng ng vi mt nh mi, nh mi ny c
ni bng n cnh mi n cc nh v1, v2, , vn. D thy rng Gn+1 khng cha K3 v c sc
s l n+1.
k.6. nh l (nh l 5 mu ca Kempe-Heawood): Mi th phng u c th t
ng bng 5 mu.
Chng minh: Cho G l mt th phng. Khng mt tnh cht tng qut c th xem G l
lin thng v c s nh n 5. Ta chng minh G c t ng bi 5 mu bng quy np theo
n.
14
f
a
(1)
(2
)
b
c
m
c
(3
)
(5
)
e (2
(1
)
(2
)
c (2
d (1
)
(4
)
Hnh 1
Hnh 2
Hnh 3
Xo 2 nh b v d v cho k a nhng nh trc k b hoc k d m khng k a (Hnh 2),
ta c th mi G c n2 nh. Theo gi thit quy np, ta c th t G ng bng 5
mu. Sau khi cc nh ca G c t ng ri (Hnh 2), ta dng li 2 nh b v d, ri t b
v d bng mu t cho a (mu 1, Hnh 3), cn a th c t li bng mu khc vi mu
ca b, c, d, e, f. V b v d khng k nhau c t bng cng mu 1, nn vi 5 nh ny
ch mi dng ht nhiu lm 4 mu.. Do G c t ng bng 5 mu.
k.7. nh l (nh l 4 mu ca Appel-Haken): Mi th phng u c th t ng
bng 4 mu.
nh l Bn mu u tin c a ra nh mt phng on vo nm 1850 bi mt
sinh vin ngi Anh tn l F. Guthrie v cui cng c hai nh ton hc M l Kenneth
Appel v Wolfgang Haken chng minh vo nm 1976. Trc nm 1976 cng c nhiu
chng minh sai, m thng thng rt kh tm thy ch sai, c cng b. Hn th na
c nhiu c gng mt cch v ch tm phn th d bng cch c v bn cn hn bn
mu t n.
C l mt trong nhng chng minh sai ni ting nht trong ton hc l chng minh
sai bi ton bn mu c cng b nm 1879 bi lut s, nh ton hc nghip d Lun
15
16
17
Bi tp chng I
1-1.V th (nu tn ti)
a.V mt th c 4 nh vi bc cc nh l 3, 2, 1.
b.V cc th m mi nh ca n u c bc l ln lt l k (1 k 5)
c.V cc th m mi nh ca n u c bc l 3 v c s nh ln lt l:4,5,6,8.
d.V mt th c 15 nh v mi nh ca n u c bc l 5.
1-2
a. Mt th c 19 cnh v mi nh u c bc 3, hi th ny c ti a bao nhiu nh ?
b.Cho mt th v hng c n nh. Hi th ny c th c ti a bao nhiu cnh. Trong trng
hp s cnh l ti a th mi nh s c bc l bao nhiu ?
c. Cho mt th v hng c n nh v 2n cnh. Chng minh rng trong th ny lun tn ti
mt nh c bc khng nh hn 4.
d. Chng minh rng trong mt n th v hng nu khng cha chu trnh th s lun tn ti t
nht l hai nh treo.
1-3.a.Xt th v hng n c s nh n > 2 . Chng minh rng th c t nht 2 nh cng bc
vi nhau.
b.Cho 1 th G c cha ng 2 nh bc l (cc nh khc nu c phi bc chn) Chng minh rng
2 nh ny lin thng vi nhau.
c.xt th v hng n c s nh n > 2. Gi s th khng c nh no c bc < (n-1)/2.
Chng minh rng th ny lin thng
d.Chng minh rng mt n th v hng l hai pha nu v ch nu s mu ca n l 2.
1-4. Tm th n m mi nh ca n u c bc 3 v c :
a) 4 nh. b) 6 nh
c) 5 nh.
d) 8 nh
1-8. C th c mt nhm 9 ngi trong mi ngi u ch quen bit ng 5 ngi khc nhau
trong nhm hay khng ?
1-9. Bit rng mi nh ca mt th G u c bc bng s l p . Chng minh rng s cnh ca G
l mt bi ca p .
1-10. Hai th sau c ng cu vi nhau khng ?
19
CHNG 2
( Hnh -2 )
2.3.DANH SCH
(1,2)
(1,3)
(2,3)
(2,4)
(3,5)
(4,5)
(4,6)
(5,2)
(5,6)
-1
-1
-1
-1
-1
-1
-1
-1
-1
CNH (CUNG)
Trong trng hp th tha ( th c s cnh m tho mn bt dng thc: m < 6n) ngi ta
thng dng cch biu din th di dng danh sch cnh.
Trong cch biu din th bi danh sch cnh (cung) chng ta s lu tr danh sch tt c cc cnh
(cung) ca th v hng (c hng). Mt cnh (cung) e = (x,y) ca th s tng ng vi hai
bin Dau[e], Cuoi[e]. nh vy, lu tr th ta cn s dng 2m n v b nh. Nhc im ca
cch biu din ny l xc nh nhng nh no ca th l k vi mt nh cho trc chng ta
phi lm c m php so snh (khi duyt qua danh sch tt c cc cnh ca th).
Ch : Trong trng hp th c trng s ta cn thm m n v b nh lu tr trng s ca cc
cnh.
Th d 3. Danh sch cnh (cung) ca th G (G1) cho trong hnh 1 l:
u
1
1
1
2
2
3
4
4
5
Cui
2
3
5
3
5
4
5
6
6
u
1
1
3
3
5
5
6
Cui
2
3
2
4
4
6
5
22
nh u
23
Bi tp chng II
2-1.Cho th v hng lin thng G nh hnh v bn.
a.Hy biu din th G bng ma trn
sc s ca th G trn.
2-2.Cho th G nh hnh v bn:
47
26
sc s k ca G v ch ra mt cch t
mu G vi k mu.
2 0
0
5
0
5
2
3
0 6
0
0
0
0
0
5
0
0
10
3
0
1
5
0
0
0
4
0
7
0
2
0
0
3 6 0
10 3
0
4
0
7
0
1 6
1
0
3
6 3
0
0
5
4
0
0
1
0
0
5
4
0
24
a.Hy biu din G bng ma trn trng s v ma trn lin thuc nh cnh.
b.Gi G l th v hng c to bng cch loi b hng trn cc cung ca G. Hy
cho bit sc s k ca G v ch ra mt cch t mu G vi k mu.
2-5.Xt th c hng G gm 5 nh c cho bi hnh v di y:
a.Hy biu din G bng ma trn trng lng v ma trn lin thuc.
b.Gi G l th v hng c to bng cch loi b hng trn cc cung ca G (v b cung
(3,4) c trng lng l 1). Hy cho bit sc s k ca G v ch ra mt cch t mu G vi k mu.
Bi tp thc hnh
2-6.Lp trnh nhp th vi cc phng php biu din: ma trn k, ma trn trng s v danh sch
cnh, ma trn lin thuc.
2-7.Lp trnh cho php chuyn i cu trc d liu biu din th di dng ma trn trng s qua
dng danh sch cnh v ngc li.
2-8.Lp trnh cho php chuyn i cu trc d liu biu din th di dng ma trn k qua dng
danh sch k v ngc li.
2-9.Cho th v hng c biu din bng ma trn k. D liu c lu trn file text dothi.inp
c cu trc nh sau:
Dng u ghi s n, trong n dng tip theo mi dng ghi n s, cc s cch nhau t nht mt
du cch. Hy vit chong trnh thc hin cc yu cu sau:
a.c ma trn k t file dothi.inp
25
b.Kim tra tnh hp l ca ma trn (kim tra xem cc gi a[i][i] c gi tr no khc 0 hay
khng ? kim tra xem c gi tr no m a[i][j] khc a[j][i] hay khng ?)
2-10.Cho mt n th. Hy vit cc hm thc hin cc yu cu sau:
a. th l c hng hay v hng ?
b.Tnh bc ca mi nh.
c.Kim tra xem c phi l th hai pha hay khng?
26
CHNG III
thc hin khng qu n ln. Tng s php ton cn pha thc hin trong cc th tc ny l O(n+m),
do trong cc th tc ny ta phi xt qua tt c cc cnh v cc nh ca th. Vy phc tp tnh
ton ca thut ton l O(n+m).
V d : Xt th cho trong hnh sau . Cc nh ca n c nh s li theo th tc
chng c thm theo th tc tm kim theo chiu su m t trn .
3( 9)
2(2)
1(1)
7(8)
6(4)
4( 3
)
10(11
)
11(12
)
5( 5
)
8(6)
13(10
)
9(7)
12(13
)
V d
TIMSAU.INP
13
0101000001000
1001000000000
0000001000000
1100011000000
0000010110000
0001101000001
0011010000000
0000100010000
0000100100000
1000000000110
0000000001010
0000000001100
0000010000000
TIMSAU.OUT
3 13
10
11 12
#include<stdio.h>
#include<conio.h>
#include<io.h>
#include<stdlib.h>
#include<dos.h>
#define MAX 20
#define TRUE 1
#define FALSE 0
/*-------------tim kiem theo chieu sau-----------*/
void Init(int A[][MAX],int *n)
{
FILE *fp;
int i,j;
fp=fopen("c:\TIMRONG.INP","r");
if(fp==NULL)
{
printf("\n khong co tap *.inp");
delay(2000);
return;
}
fscanf(fp,"%d",n);
printf("\n so dinh cua do thi la=%d",*n);
printf("\n\n ma tran ke cua do thi la");
for(i=1;i<=*n;i++)
{
printf("\n\n");
for(j=1;j<=*n;j++)
{
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
/*----------------------------------------------*/
void DFS(int A[][MAX],int n,int v,int chuaxet[])
{
29
int u;
printf("%3d",v);chuaxet[v]=FALSE;
for(u=1;u<=n;u++)
{
if(A[v][u]==1 && chuaxet[u])
DFS(A,n,u,chuaxet);
}
}
/*---------------------------------------------*/
void main()
{
clrscr();
int A[MAX][MAX],n,chuaxet[MAX];
Init(A,&n);
for(int i=1;i<=n;i++) chuaxet[i]=TRUE;
printf("\n\n\n\n");
for(i=1;i<=n;i++)
if( chuaxet[i])
DFS(A,n,i,chuaxet);
getch();
}
2. TM KIM THEO CHIU RNG TRN TH
rng trong thut ton tm kim theo chiu su nh c thm cng mun s cng sm
tr thnh duyt xong. iu l h qu tt yu ca vic cc nh c thm s c kt
np vo trong ngn xp (STACK). Tm kim theo chiu rng trn th, nu ni mt cch
ngn gn, c xy dng trn c s thay th ngn xp (STACK) bi hng i (QUEUE).
Vi s ci bin nh vy, nh c thm cng sm s cng sm tr thnh duyt xong
(tc l cng sm di khi hng i). Mt nh s tr thnh duyt xong ngay sau khi ta
xt xong tt c cc nh k (cha c thm) vi n. Th tc c th m t nh sau:
void BFS(v);
(*Tim kiem theo chieu rong bat dau tu dinh v, cac bien chuaxet, Ke la bien cuc bo*)
{
QUEUE= ;
QUEUE v; (*ket qua nap vao QUEUE*)
30
Chuaxet[v]=0;
While (QUEUE<> )
{
P QUEUE; (*lay p tu QUEUE:*)
Tham_dinh(p);
for u Ke(v)
If (chuaxet[u])
{
QUEUE u;
chuaxet[u]=0;
}
}
}
Khi , tm kim theo chiu rng trn th c thc hin nh thut ton sau:
void main()
{
(*Initialization*)
for f V do chuaxet[v]=1;
for v V
if (chuaxet[v]) BFS(v);
}
Lp lun tng t nh trong th tc tm kim theo chiu su, c th ch ra c rng lnh
gi BFS(v) s cho php thm n tt c cc nh thuc cng thnh phn lin thng vi nh
v, v mi nh ca th s c thm ng mt ln. phc tp tnh ton ca thut ton
l O(m+n).
3(10)
2(2)
7(6)
1(1)
4(3)
10(4
)
11(7
)
6(5)
13(11
)
5(9)
9(13
)
8(12
)
12(8)
V d:
TIMRONG.INP
13
0101000001000
1001000000000
0000001000000
1100011000000
0000010110000
0001101000001
0011010000000
0000100010000
0000100100000
1000000000110
0000000001010
0000000001100
0000010000000
TIMRONG.OUT
1 2 4 1 0 6 7 11 12 5 13 3 8 9
#define TRUE 1
#define FALSE 0
/*-------------tim kiem theo chieu rong-----------*/
void Init(int A[][MAX],int *n,int *solt,int *chuaxet)
{
FILE *fp;int i,j;
fp=fopen("timrong.inp","r");
if(fp==NULL)
{
printf("\n khong co tap *.inp");
delay(2000);
return;
}
fscanf(fp,"%d",n);
printf("\n so dinh cua do thi la=%d",*n);
printf("\n ma tran ke cua do thi la");
for(i=1;i<=*n;i++)
{
printf("\n\n");
for(j=1;j<=*n;j++)
{
fscanf(fp,"%d",&A[i][j]);
printf("%4d",A[i][j]);
}
}
for(i=1;i<=*n;i++) chuaxet[i]=0;
*solt=0;
}
/*----------------------------------------------*/
void BFS(int A[][MAX],int n,int i,int *solt,int chuaxet[],int QUEUE[MAX])
{
int u,dauQ,cuoiQ,j;
dauQ=1;cuoiQ=1;
QUEUE[cuoiQ]=i;
chuaxet[i]=*solt;
while(dauQ<=cuoiQ)
{
u=QUEUE[dauQ];
printf("%4d",u);
dauQ=dauQ+1;
for(j=1;j<=n;j++)
{
if(A[u][j]==1 && chuaxet[j]==0)
{
cuoiQ=cuoiQ+1;
QUEUE[cuoiQ]=j;
chuaxet[j]=*solt;
}
33
}
}
}
/*---------------------------------------------*/
void main()
{
clrscr();
int A[MAX][MAX],n,chuaxet[MAX],QUEUE[MAX],solt,i;
Init(A,&n,&solt,chuaxet);
for(i=1;i<=n;i++) chuaxet[i]=0;
printf("\n\n\n\n");
for(i=1;i<=n;i++)
if( chuaxet[i]==0)
{
solt=solt+1;
BFS(A,n,i,&solt,chuaxet,QUEUE);
}
getch();
3. TM NG I V KIM TRA TNH LIN THNG
Trong mc ny ta xt ng dng cc thut ton tm kim m t trong cc mc trc vo vic
gii bi ton c bn trn th: bi ton v tm ng i v bi ton v xc nh tnh lin
thng ca th.
a) Bi ton tm ng i gia hai nh:
Gi s s v t l hai nh no ca th. Hy tm ng i t s n t.
Nh trn phn tch, th tc DFS(s) (BFS(s)) s cho thm tt c cc nh thuc cng mt
thnh phn lin thng vi s. v vy, sau khi thc hin xong th tc, nu chuaxet[t]=true(1),
th iu c ngha l khng c ng i t s n t, cn nu chuaxet[t]=false(0
) th t thuc cng thnh phn lin thng vi s, hay ni mt cch khc: tn ti ng i t s
n t. Trong trng hp tn ti ng i, ghi nhn ng i, ta dng thm biu thc
Truoc[v] ghi nhn nh i trc nh v trong ng i tm kim t s n v. Khi , i
vi th tc DFS(v) cn sa i cu lnh trong n nh sau:
If (chuaxet[u])
{
Truoc[u]=v;
DFS(u);
}
Cn i vi th tc BFS(v) cn sa i cu ln if trong n nh sau:
If (chuaxet [u])
34
{
QUEUE u;
chuaxet[u]=0;
Truoc[u]=p;
}
Ch :
ng i tm c theo thut ton tm kim theo chiu rng l ng i ngn nht (theo s
cnh) t s n t. iu ny suy trc tip t th t thm nh theo thut ton tm kim theo
chiu rng.
FILE *fp;
int i,j;
fp=fopen("lthong.inp","r");
if(fp==NULL)
{
printf("\n khong co tep INP");
delay(2000);
return;
}
fscanf(fp,"%d",&n);
printf("\n so dinh do thi la:%d",n);
printf("\n ma tran ke cua do thi");
printf("\n\n");
for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=n;j++)
{
fscanf(fp,"%3d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
for(i=1;i<=n;i++)
{
chuaxet[i]=TRUE;
truoc[i]=0;
}
}
//-------------------------------------------------void result()
{
printf("\n\n");
if(truoc[t]==0)
{
printf("\n khong co duong di tu %d den %d",s,t);
getch();
return;
}
printf("\n duong di tu %d den %d la :",s,t);
int j=t;
printf("%2d <-",t);
while(truoc[j]!=s)
{
printf("%3d<-",truoc[j]);
j=truoc[j];
}
printf("%3d",s);
36
}
//-------------------------------------------//--------------------------------------------void BFS(int s)
{
int u,dauQ,cuoiQ,p;printf("\n");
dauQ=1;cuoiQ=1;
queue[cuoiQ]=s;
chuaxet[s]=FALSE;
printf("\n cac dinh lien thong voi %d:",s,"la:");
while(dauQ<=cuoiQ)
{
u=queue[dauQ];
dauQ=dauQ+1;
printf("%3d",u);
for(p=1;p<=n;p++)
{
if(A[u][p]==1 && chuaxet[p]==TRUE)
{
cuoiQ=cuoiQ+1;
queue[cuoiQ]=p;
chuaxet[p]=FALSE;
truoc[p]=u;
}
}
}
}
//-------------------------------------//-------------------------------------void duongdi()
{
int chuaxet[MAX],truoc[MAX],queue[MAX];
init();
printf("\n");
BFS(s);
getch();
result();
}
//-------------------------------------//-------------------------------------void main()
{
clrscr();
printf("\n nhap dinh dau s=");
scanf("%d",&s);
printf("\n nhap dinh cuoi t=");
37
scanf("%d",&t);
duongdi();
getch();
}
b) Tm cc thnh phn lin thng ca th:
Hy cho bit th gm bao nhiu thnh phn lin thng v tng thnh phn lin thng ca
n l gm nhng nh no. ?
Do th tc DFS(v) (BFS(s)) cho php thm tt c cc nh thuc cng mt thnh
phn lin thng vi s, nn s thnh phn lin thng ca th bng s ln gi n th tc
ny.
{
printf("\n");
for(j=1;j<=*n;j++)
{
fscanf(fp,"%3d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
for(i=1;i<=*n;i++)
chuaxet[i]=0;
*solt=0;
}
//-------------------------------------------------void result(int *chuaxet,int n,int solt)
{
printf("\n\n");
if(solt==1)
{
printf("\n do thi lien thong");
getch();
return;
}
for(int i=1;i<=solt;i++)
{
printf("\n so thanh phan lien thong la: %3d",solt);
for(i=1;i<=solt;i++)
{
printf("\n thanh phan lien thong thu %3d:",i);
for(int j=1;j<=n;j++)
{
if(chuaxet[j]==i)
printf("%3d",j);
}
}
}
}
39
getch();
}
//---------------------------------------------void main()
{
clrscr();
lien_thong();
}
Bi tp chng III:
41
3-1.Hy lit k cc nh ca th c duyt theo phng php tm kim theo chiu su, tm kim
theo chiu rng. Tm ng i t nh A n nh H.
7
3
BFS.
3-3.Cho th v hng lin thng
G nh hnh v bn.
Bi tp thc hnh
42
43
V d 1
MH.DAT
4
TKB.DAT
1
0100
0010
0001
1000
1111
V d 2
MH.DAT
TKB.DAT
0100000
22
0001000
12
0001000
34
0000110
18
0000000
9 12
0000001
13 22
0000000
13 14
2 2 8 4 10 2 3
15 17
12
13
INFOR.OUT
23
5
4
CHNG IV
TH EULER V TH HAMILTON
45
C th coi nm 1736 l nm khai sinh l thuyt th, vi vic cng b li gii bi ton
v cc cu Konigsberg ca nh ton hc li lc Euler (1707-1783). Thnh ph
Konigsberg thuc Ph (nay gi l Kaliningrad thuc Nga) c chia thnh bn vng
bng cc nhnh sng Pregel, cc vng ny gm hai vng bn b sng, o Kneiphof v
mt min nm gia hai nhnh ca sng Pregel. Vo th k 18, ngi ta xy by chic cu
ni cc vng ny vi nhau.
46
v1
v2
......
47
Xut pht t u, ta c th i theo cnh (u,v) hoc (u,x), gi s l (u,v) (xo (u,v)). T v
c th i qua mt trong cc cnh (v,w), (v,x), (v,t), gi s (v,w) (xo (v,w)). Tip tc, c
th i theo mt trong cc cnh (w,s), (w,y), (w,z), gi s (w,s) (xo (w,s)). i theo cnh
(s,y) (xo (s,y) v s). V (y,x) l cu nn c th i theo mt trong hai cnh (y,w), (y,z), gi
s (y,w) (xo (y,w)). i theo (w,z) (xo (w,z) v w) v theo (z,y) (xo (z,y) v z). Tip
tc i theo cnh (y,x) (xo (y,x) v y). V (x,u) l cu nn i theo cnh (x,v) hoc (x,t),
48
gi s (x,v) (xo (x,v)). Tip tc i theo cnh (v,t) (xo (v,t) v v), theo cnh (t,x) (xo
cnh (t,x) v t), cui cung i theo cnh (x,u) (xo (x,u), x v u).
49
50
void Euler_Cycle()
{
STACK= ; CE= ;
Chon u la mot dinh nao do cua do thi;
STACK u;
while STACK<>
{
x=top(STACK); //x la phan tu dau STACK
if Ke(x)<>
{
y=dinh dau tien trong danh sach Ke(x);
STACK y;
// loai bo canh (x,y) khoi do thi
Ke(x)=Ke(x)\{ y} ;
Ke(y)=Ke(y)\{ x} ;
}
else
{
x STACK;
CE x;
}
}
}
51
1
1 2 3 4 5 6
3
Ta c ma trn k
1
1 1
2 1
1 1 1
3 1 1
1
1
4
1 1
5
1
1
6
1
1
52
1
2
1
2
3
4
5
6
3
4
1
1 1
1
1
1 1
1 1
1
1
1
1
1
-
1
2
3
4
5
6
3
4
1
1 1
1
1
1
1 1
1
1
1
1
1
1
1
2
3
4
5
6
3
4
1 1
1
1
1 1
1
1
1
1
th v chu trnh nh c
53
1
1 2 3 4 5 6
1
2
3
4
5
6
3
4
1
1
1
1
1
1
1
1 2 3 4 5 6
1
2
3
4
5
6
3
4
1
1
1
1
1
1
1 2 3 4 5 6
1
2
3
4
5
6
3
4
1
1
1
1
54
1
1 2 3 4 5 6
1
2
3
4
5
6
3
4
1
1
1
1 2 3 4 5 6
1
2
3
4
5
6
3
4
th Hamilton (hnh thp nh din u biu din trong mt phng) vi chu trnh
Hamilton A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, A (ng t m).
2) Trong mt t thi u bng bn c n (n 2) u th tham gia. Mi u th gp tng
u th khc ng mt ln. Trong thi u bng bn ch c kh nng thng hoc thua.
Chng minh rng sau t thi u c th xp tt c cc u th ng thnh mt hng dc,
ngi ng sau thng ngi ng ngay trc anh (ch) ta.
n
th G l mt th Hamilton.
2
Chng minh: nh l c chng minh bng phn chng. Gi s G khng c chu trnh
Hamilton. Ta thm vo G mt s nh mi v ni mi nh mi ny vi mi nh ca G,
ta c th G. Gi s k (>0) l s ti thiu cc nh cn thit G cha mt chu
trnh Hamilton. Nh vy, G c n+k nh.
n 1
th G l th na Hamilton.
2
4.2.3, trong G c mt chu trnh Hamilton. B x ra khi chu trnh ny, ta nhn c
ng i Hamilton trong G.
n
th G l mt th Hamilton.
2
Th d 4:
th G ny c 8 nh, nh no cng
th G ny c 5 nh bc 4 v 2 nh
c bc 4, nn theo nh l 4.2.3, G l
th Hamilton.
nh l: th y Kn vi n l v n 3 c ng
n 1
chu trnh Hamilton phn
2
bit.
n(n 1)
cnh v mi chu trnh Hamilton c n cnh, nn s chu
2
n 1
trnh Hamilton phn bit nhiu nht l
.
2
Chng minh: Kn c
Gi s cc nh ca Kn l 1, 2, ..., n. t nh 1 ti tm ca mt ng trn v cc nh
2, ..., n t cch u nhau trn ng trn (mi cung l 3600/(n-1) sao cho nh l nm
na ng trn trn v nh chn nm na ng trn di. Ta c ngay chu trnh
Hamilton u tin l 1,2, ..., n,1. Cc nh c gi c nh, xoay khung theo chiu kim
ng h vi cc gc quay:
n 3 360 0
360 0
360 0
360 0
, 2.
, 3.
, ...,
.
,
2 n 1
n 1
n 1
n 1
n3
n 1
khung phn bit vi khung u tin. Do ta c
chu trnh
2
2
Hamilton phn bit.
ta nhn c
60
4. Trong qu trnh xy dng chu trnh Hamilton, sau khi ly hai cnh ti nh x t vo
chu trnh Hamilton ri th khng th ly thm cnh no ti x na , do c th xa mi
cnh con li ti x .
y l qui tc quan trng tm chu trnh Hamilton .
63
BI TP CHNG IV:
Kn,
b) Cn,
c) Wn,
d) Qn.
4.2. Vi gi tr no ca m v n cc th phn i y Km,n c:
a) chu trnh Euler ?
b) ng i Euler ?
4.3. Vi gi tr no ca m v n cc th phn i y Km,n c chu trnh Hamilton ?
4.4. Chng minh rng th lp phng Qn l mt th Hamilton. V cy lit k tt c
cc chu trnh Hamilton ca th lp phng Q3.
4.5. Trong mt cuc hp c 15 ngi mi ngy ngi vi nhau quanh mt bn trn mt ln.
Hi c bao nhiu cch sp xp sao cho mi ln ngi hp, mi ngi c hai ngi bn cnh
l bn mi, v sp xp nh th no ?
4.6. Hiu trng mi 2n (n 2) sinh vin gii n d tic. Mi sinh vin gii quen t nht
n sinh vin gii khc n d tic. Chng minh rng lun lun c th xp tt c cc sinh vin
gii ngi xung quanh mt bn trn, mi ngi ngi gia hai ngi m sinh vin quen.
3
7
11
8
13
12
6
10
14
15
16
20
17
18
21
19
4.9. Gii bi ton ngi pht th Trung Hoa vi th cho trong hnh sau:
64
4.11. Cho th d v:
a) th c mt chu trnh va l chu trnh Euler va l chu trnh Hamilton;
b) th c mt chu trnh Euler v mt chu trnh Hamilton, nhng hai chu trnh
khng trng nhau;
c) th c 6 nh, l th Hamilton, nhng khng phi l th Euler;
d) th c 6 nh, l th Euler, nhng khng phi l th Hamilton.
4-15. Kim tra xem cc th sau c cha chu trnh hoc ng i Euler hay khng ?
65
4.16.Cho th PeterSon(P)
a.Tm mt ng i Hamilton trong P
b.P c cha chu trnh Hamilton hay khng ?
4-17.Kim tra xem cc th sau c cha chu trnh hoc ng i Hamilton hay khng ?
1
Bi tp thc hnh
4-18.Bi ton ngi a th:
Cho n thnh ph, cc thnh ph c nh s t 1 n n. Mt ngi a th mun i qua
tt c cc con ng, mi con ng ng 1 ln. Hy lp l trnh cho ngi a th hoc
thng bo khng tn ti ng i.
4-19.Cho th c biu din bng ma trn k. Hy lit k tt c cc chu trnh Hamilton
ca th.
4-20.Bi ton hnh trnh ngi bn hng (TRAVELING SALESMAN PROBLEM)
C n thnh ph (c nh s t 1 n n), mt ngi bn hng xut pht t mt thnh ph,
mun i qua cc thnh ph khc, mi thnh ph mt ln ri quay v thnh ph xut pht..
66
CONF.OUT
67
#include <stdio.h>
cout<<endl;
#include <stdlib.h>
getch();
#include <iostream.h>
exit(1);
void nhap() {
int j;
f=fopen("D:\\DOTHI\\EULER1.inp","rt");
fscanf(f,"%d",&n); cout<<n<<endl;
a[i]=j;
m[d][j]=0;
{ fscanf(f,"%d",&m[i][j]); cout<<m[i][j]<<"
m[j][d]=0;
"; } cout<<endl;
if (i == tc) xuat();
else
tc=0;
euler(j,i+1);
m[d][j]=1;
(m[i][j]==1) tc++;
m[j][d]=1;
} void main() {
nhap();
void xuat() {
euler(dau,1);
getch();
cout<<"--->"<<a[i]; co=1;
68
V d:
EULER1.INP
EULER2.INP
EULER3.INP
00111
01111
0111
00111
10111
1000
11011
11011
1000
11101
11101
1000
11110
11110
Yu cu sinh vin ci t thut ton tm chu trnh Euler nh nu trong phn l thuyt.
2.Tm chu trnh Hamilton (bi ton ngi bn hng)
i qua mi nh mt ln sao cho tng chi ph l thp nht.
Thut ton ti u cho bi ton hnh trnh ngi bn hng
Besttour=0; Bestcost=maxint;
while (tm thy mt hon v {xi} ca tp {1,2,,n})
{
// vi mi hon v {xi} ta c mt hnh trnh, tnh chi ph cho tng hnh trnh ny
cost=0;
for (i:=1 ;I<= n-1;I++) cost+=c[xi,xi+1]; cost+=c[xn,x1];
if (cost<bestcost) { bestcots=cost ;besttour=x }
}
69
#include <conio.h>
#include <stdio.h>
if (i==n) output();
#include <values.h>
else permute(i+1);
void output();
b[j]=1;
void readfile();
void result();
void readfile() {
f=fopen("d:\\dothi\\tsp1.inp","rt");
costbest ;
fscanf(f,"%d",&n);
void main() {
readfile();
permute(1);
[j]);
result(); }
if (i==j) c[i][j]=MAXINT;
void output() {
int cost=0;
fclose(f);
costbest=MAXINT;
cost=cost+c[x[i]] [x[i+1]];
cost=cost+c[x[n]] [x[1]];
if (cost<costbest) {
void result() {
costbest=cost;
cout<<costbest<<endl;
cout<<tourbest[i]<<" ";
getch();
void permute(int i) {
}.
70
V d:
TSP1.INP
TSP2.INP
TSP3.INP
035756
01274
0 21 40 32 28
202317
10443
15 0 18 37 25
470224
24012
19 17 0 6 7
374052
74104
9 50 28 0 4
462402
53240
25 6 5 10 0
562530
S DNG NGUYN L THAM LAM GII BI TON NGI BN HNG:
Vi nhng bi ton m khng gian trng thi c th pht sinh cc ln th vic dng phng
php vt cn l iu khng th. Nguyn l tham lam ly tiu chun ti u ton cc lm
tiu chun chn la hnh ng trong phm vi cc b. Mt s v d c th p dng nguyn l
ny nh cc bi ton c m hnh ton hc l bi ton ngi bn hng, bi ton t mu
th. Hn na nu c mt chin lc tham lam hp l, th phng php ny s tm c li
gii ti u (thut ton Kruskal, thut ton Prim s trnh by chng sau).
Lc ca phng php tham lam
Procedure Greedy(A,S)
{ l tp cc ng c vin, S l tp nghim}
begin
S=
While A do
Begin
X=select(A); { chn phn t tt nht trong A}
A=A-{x}
If S {x} chp nhn c then
S= S {x}
End;
End;
Thut gii GTS1(u) Thut gii GTS1 (Greedy Traveling Saleman)
INPUT:
OUTPUT:
v:=u;
tour:={u};
cost=0;
for i=1 to n
{t w l thnh ph k sau thnh ph v.
tour=tour + {w};
cost=cost+c[v,w]
v=w;
}
tour=tour + {u};
cost=cost+c[v,u]
THUT GII GTS2
Input n, c, p,Vi (i=1..p)// vi l cc thnh ph c chn ngu
// nhin trong tp n thnh ph ban u
Output:
besttour, bestcost
Bestcost=0
Besttour={}
For i=1 to p
{
bestcost=cost(vk)
besttour=tour(vk)
}
}
CHNG 5
72
CY V CY KHUNG CA TH
th v hng lin thng khng c chu trnh gi l cy. Khi nim cy ln u tin c
Cayley a ra vo nm 1857, khi ng s dng chng m mt dng cu trc phn t ca
cc hp cht ho hc trong ho hc hu c. Cy cn c s dng rng ri trong rt nhiu
lnh vc khc nhau, c bit trong tin hc, cy c s dng xy dng cc thut ton t
chc cc th mc, cc thut ton ct gi, truyn d liu v tm kim
5.1. nh ngha cy , rng v bi
nh ngha 5.1.a. Ta gi cy ( tree) l th hu hn, v hng, lin thng, khng c
chu trnh .
nh ngha 5.1.b. Ta gi rng ( forest) l th h hn, v hng, khng c chu trnh .
(Hay : Mt tp hp gm nhiu cy khng c nh chung gi l rng)
nh ngha 5.1.c. Bi l th G=(X,U) hu hn, c hng, l mt bi c gc x1X nu
n c t nht 2 nh v tha mn 3 iu kin sau:
1. Mi nh khc x1 u l im cui ca mt cung duy nht
2. nh x1 khng l nh cui ca bt k cung no
3. th khng c chu trnh , khng c vng
5.2. Chu s
a) Chu s ca th c nh ngha l s sau:
v(G) =m-n+p vi m: cnh,
n: s nh
p: s vng lin thng
b) Pht biu cng thc Euler: Chu s ca th bng s vc t trong h chu trnh c s .
V d: m=5,n=4,p=1 th chu s l v(G)=5-4+1=2. Suy ra s vc t trong
h chu trnh c lp cc i bng 2.
73
74
5.3. Tm v bn knh ca cy
Xt mt cy c gc T
Mc (level) ca mt nh v trong T l khong cch t gc n v .
Mc ln nht ca mt nh bt k trong cy gi l chiu cao ca cy (height)
Nu cnh xy l cnh ca T th ta gi x l cha (parent) ca y , y l con(child) ca x .
Hai nh cng cha gi l anh em (siblings) ca nhau . Nu c mt ng (c hng) t v
n w th v c gi l nh trc (ancestor) ca w , w gi l nh sau (desendant) ca v .
Nhng nh khng c con gi l l (leaves) , nhng nh khng l l c gi l nh trong
(internal vertices)
-Mt tp hp gm nhiu cy i mt khng c nh chung c gi l rng (forest).
By gi ta xt mt cy t do T
lch tm (eccentricity) ca nh x , k hiu l E(x) l khong cch ln nht t x n mt
nh bt k trong T :
E(x)= Max (x,y), yT
a) Tm v bn kinh ca Cy : nh c lch tm nh nht trong T c gi l Tm
(center) ca T , lch tm ca tm c gi l bn knh ca cy
nh l 5.3.1 : Trong mt cy t do c nhiu nht hai tm
5.4 Cy m-phn
a) nh ngha : Cho mt cy c gc T.Nu s cy con ti a ca mt nh trong T l m v
c t nht mt nh c ng m con th T gi l mt cy m-phn (m-arytree)
Nu mi nh trong T u c ng m con th T gi l mt cy m-phn y
(complete m arytree)
75
Cy con bn tri
Cy con bn phi
vi e T.
for u ke(v) do
if chuaxet(u) then
begin
T:=T {(v,u)}
SPANNING_TREE_DFS(v)
end;
end;
begin
(*khi to*)
for u V do
chuaxet:=true;
T:=; (*T l tp cnh ca cy khung*)
SPANNING_TREE_DFS(root) (*root l nh no ca th*)
end.
5.5.4. Php duyt cy theo chiu rng :Breeth First Search (BFS)
Bc 1 : Chn mt nh bt k ca G lm gc ca T
Bc 2 : t mi cnh ni gc vi mt nh ngoi T vo T . ln lt xt tng nh
con ca gc , xem nh ny l gc mi . lp li th tc ny cho n khi mi nh ca G u
nm trong T .
Th d: Cho th lin thng G nh sau :
Ly nh 1 lm gc .
Ta c cy bao trm to theo b su l :
79
C th ta c cc bc sau :
Bc 1:
T= { V, }
Bc 2:
Bc 3: Chn mt cnh c trng s nh nht khng trong T sao cho khi thm cnh ny
vo th T khng to thnh chu trnh . t cnh ny vo T . Tr v bc 2 .
Procedure Kruskal;
Begin
T:=
While |T| <|n-1| and (E ) do
Begin
Chn e l cnh c di nh nht trong E
E:=E\{e}
If (T {e} khng cha chu trnh ) then
T:=T {e};
End;
If |T| <|n-1| then
th khng lin thng
End;
V d:
Tm cy bao trm ti thiu ca th sau:
Sp xp cc cnh c di tng dn :
BC,BE,GD,AD,AB,EG,EC,GH,DE,GF,BD,DF,CH,EH
Th t cc cnh to thnh cy bao trm l :
BC,BE,GD,AD,AB,GH,GF,
81
Procedure Prim
Var U: tp cc nh ;
U,v: nh
Begin
U:={mt nh ty }
T:= ;
Repeat
Chn cnh (u,v) ngn nht vi u U, v V-U
U:=U {v}
T:=T {(u,v)}
Until U=V;
82
End;
BI TP CHNG V
Bi tp l thuyt
5-1.Gi s th G lin thng, c 13 nh v 20 cnh. Hi cy khung ca G c bao nhiu
nh ? c bao nhiu cnh ?
83
5-2.Tm cy khung ca th (hnh 1,2) sau theo phng php DFS, BFS (chn nh 1 lm
gc)
2
Hnh 1
Hnh 2
5-3.Tm cy khung b nht ca cc th sau (hnh 3,4) theo phng php KrusKal, Prim
3
20
11
33
8
18
1
17
14
4
3
4
5
18
16
13
1
12
4
5
Hnh 3
Hnh 4
84
5-4.Tm cy khung b nht ca cc th sau (hnh 5,6) theo phng php KrusKal,
Prim
8
10
11
18
16
30
2
14
4
12
10
26
6
1
Hnh 5
Hnh 6
66
4
2 42
8 8
E
1010
3
G
G
Hnh 7
85
Bi tp thc hnh
5-6. Mng an ton
Cho mt mng N (N <= 20) my tnh c nh s t 1 n N. S mng c cho bi
h gm M knh (on) ni trc tip gia mt s cp my trong mng, m knh tng ng
vi m cp. Cho bit chi ph truyn 1 n v thng tin theo mi knh ca mng.
Ngi ta cn chuyn mt bc thng ip t my s n my t. m bo an ton, ngi ta
chuyn bc thng in ny theo hai ng truyn tin khc nhau (tc khng c knh no)
ca mng c s dng trong c hai ng truyn tin; cho php hai ng truyn tin cng
i qua mt s my tnh). Chi ph ca mt ng truyn c hiu l tng chi ph trn cc
knh ca n. n gi ng truyn t my s sang my t c tnh nh sau:
Vi hai my s v t, cng bc thng ip c di l 1 n v thng tin, n gi truyn cho
cp (s, t) c tnh bng tng chi ph chuyn thng ip an ton (bng tng chi ph ca hai
ng truyn tin) l nh nht.
Ngi ta mong mun mng my tnh (mng truyn tin ni trn tha mn tnh cht an ton
theo ngha l t mt my bt k lun truyn c (mt cch an ton) thng ip ti mt
my bt k khc. Khi mt mng an ton, ngi ta tnh c n gi ca mng l tng n
gi mi ng truyn t mt my bt k ti mt my bt k khc.
Ma trn n gi ca mng l mng hai chiu A c N dng v N ct, m gi tr phn t A[i,
j] chnh l n gi t my i sang my j.
Cu 1: Cho trc mt mng, hy kim ra tnh an ton ca mng .
Cu 2: Khi mng khng an ton c php b sung mt s knh truyn n tr thnh an
ton. n gi mi knh truyn b sung theo c coi bng hai ln gi tr cc i n gi
cc knh c. Mi knh b sung c coi c n gi nh nhau. Hy tm cch b sung cc
knh mi m n gi mng l nh nht.
Cu 3: Khi mng an ton hoc sau khi b sung knh mng an ton, hy in ra n gi
mng v ma trn n gi.
D liu vo: cho trong file INP.B2 vi cu trc nh sau:
Dng u tin ghi 2 s n, m cch nhau bi du cch.
Mi dng th i trong s m dng tip theo ghi thng tin v knh ni th i ca mng gm 3 s
d[i], c[i], g[i] trong d[i], c[i] l ch s ca hai my tng ng vi knh ny v g[i]
(nguyn dng) l chi ph truyn mt n v thng tin t my d[i] n my c[i] theo
86
#include <conio.h>
2.
#include <iostream.h>
3.
#include <stdio.h>
4.
int daxet[100];
5.
int a[100][100];
6.
int dau[100],cuoi[100];
7.
int socanh=0;
8.
int n;
9.
void dfs(int v)
10.
11.
daxet[v]=1;
12.
13.
14.
15.
dau[++socanh]=v;
87
16.
cuoi[socanh]=u;
17.
dfs(u);
18.
19.
20.
void readfile()
21.
22.
FILE *f;
23.
clrscr();
24.
f=fopen("d:\\dothi\\tree.inp","rt");// hinh2.inp
25.
fscanf(f,"%d",&n);
26.
27.
28.
fscanf(f,"%d",&a[u][v]);
29.
fclose(f);
30.
31.
void find()
32.
33.
34.
daxet[v]=0;
35.
for (v=1;v<=n;v++)
36.
if (!daxet[v])
37.
dfs(v);
38.
39.
void treedfs()
40.
41.
42.
cout<<"("<<dau[i]<<","<<cuoi[i]<<")"<<endl;
43.
44.
void main()
45.
46.
readfile();
47.
find();
88
48.
treedfs();
49.
}
TREE.INP
TREE.OUT
?
8
00010100
00011001
00000100
11001110
01010010
10110000
00011001
01000010
Tm cy khung da vo BFS
1.
#include <conio.h>
2.
#include <iostream.h>
3.
#include <stdio.h>
4.
int daxet[100];
5.
int a[100][100];
6.
int Queue[100];
7.
int dau[100],cuoi[100];
8.
int socanh=0;
9.
int n;
10.
void BFS(int u)
11.
12.
int w,v;
13.
int dauQ,cuoiQ;
14.
dauQ=1;cuoiQ=1;
15.
Queue[dauQ]=u;
16.
daxet[u]=1;
17.
while (dauQ<=cuoiQ)
18.
{
89
19.
v=Queue[dauQ++];
20.
for (w=1;w<=n;w++)
21.
22.
23.
Queue[++cuoiQ]=w;
24.
daxet[w]=1;
25.
dau[++socanh]=v;
26.
cuoi[socanh]=w;
27.
28.
29.
30.
void find()
31.
32.
33.
daxet[v]=0;
34.
for (v=1;v<=n;v++)
35.
if (!daxet[v])
36.
BFS(v);
37.
38.
void readfile()
39.
40.
FILE *f;
41.
clrscr();
42.
f=fopen("d:\\dothi\\tree.inp","rt");
43.
fscanf(f,"%d",&n);
44.
45.
46.
fscanf(f,"%d",&a[u][v]);
47.
fclose(f);
48.
49.
void treebfs()
50.
{
90
51.
52.
53.
cout<<"("<<dau[i]<<","<<cuoi[i]<<")"<<endl;
54.
55.
56.
void main()
57.
58.
readfile();
59.
find();
60.
treebfs();
61.
}
TREE.INP
TREE.OUT
?
00010100
00011001
00000100
11001110
01010010
10110000
00011001
01000010
V d
69
2 3 18
2 4 20
1 2 33
354
468
459
5 6 14
3 4 16
1 3 17
Phn khai bo cc bin
Khai bo kiu d liu c tn l canh lu tr thng tin cc cnh ca th, mi cnh ca
th c biu din bi nh u (dau), nh cui (cuoi) v trng s (w). n l s nh ca
th v m l s cnh ca th. c l mt mng 1 chiu kiu canh. connect l mng 2 chiu
cho bit hai nh no trong cy khung tm c c lin thng nhau hay khng ?
connect[i][j] =1 nu i v j l lin thng v ngc li
.const max=100; // hoac viet #define max 100
struct canh
{
int dau,cuoi;
int w;
};
int
n,m,connect[max][max];
canh c[max];
Chng ta cn thc hin mt s hm sau:
1.Hm c file
2.Hm sp xp cc cnh theo chiu tng dn
3.Hm cp nht li cc nh lin thng ca cy khung tm c
Ti mi thi im ta xt cnh (u,v) trong dy cc cnh c sp, nu hai nh u,v
l khng lin thng - ngha l connect[u][v]=0 thi cnh (u,v) ny s c a vo cy khung
kt qu v ta cn cp nht li s lin thng ca cc nh c trong cy khung ang tm
thy n thi im bng cch cho connect[i][j]=1 v connect[j][i]=1 v ch l khi a
92
#include<conio.h>
2.
#include<stdio.h>
3.
#include<iostream.h>
4.
5.
struct canh
6.
{ int dau,cuoi;
7.
int w;
8.
};
9.
int n,m,connect[max][max];
10.
canh
11.
void readfile()
12.
13.
FILE
14.
f=fopen("d:\\dothi\\kruskal.inp","rt");
15.
fscanf(f,"%d%d",&n,&m);
16.
17.
fscanf(f,"%d%d%d",&c[i].dau,&c[i].cuoi,&c[i].w);
18.
fclose(f);
19.
for (i=1;i<=n;i++)
20.
21.
connect[i][j]=0;
22.
for (i=1;i<=n;i++)
c[max];
*f;
93
23.
connect[i][i]= 1;
24.
25.
void sort()
26.
{canh temp;
27.
28.
29.
30.
31.
c[i]=c[j];
32.
c[j]=temp;
33.
34.
for (i=1;i<=m;i++)
35.
temp=c[i];
37.
38.
39.
connect[i][j] = 1;
40.
connect[j][i] = 1;
41.
42.
43.
44.
45.
connect[k][l]=1;
46.
connect[l][k]=1;
47.
48.
49.
void kruskal()
50.
51.
int tong=0,i=1,socanhchon=0,dinhdau,dinhcuoi;
52.
53.
{dinhdau=c[i].dau;
94
54.
dinhcuoi=c[i].cuoi;
55.
if( connect[dinhdau][dinhcuoi]==0)
56.
57.
socanhchon++;
58.
updateconnect(dinhdau,dinhcuoi);
59.
cout<<dinhdau<<","<<dinhcuoi<<","<<c[i].w<<endl;
60.
tong=tong+c[i].w;
61.
62.
i++;
63.
64.
cout<<tong;
65.
66.
void main()
67.
68.
readfile();
69.
sort();
70.
kruskal();
71.
#include<conio.h>
2.
#include<stdio.h>
3.
#include<iostream.h>
4.
5.
const MAXINT=32767;
6.
int n,c[max][max];
7.
void readfile()
8.
9.
FILE
10.
f=fopen("d:\\dothi\\prim1.inp","rt");
11.
fscanf(f,"%d",&n);
12.
*f;
95
13.
14.
fscanf(f,"%d",&c[i][j]);
15.
fclose(f);
16.
17.
void prim()
18.
19.
int vh[max],daxet[max];
20.
21.
vh[sodinh]=1;
22.
23.
daxet[sodinh]=1;
24.
while (sodinh<n)
25.
26.
int min=MAXINT;
27.
28.
29.
30.
31.
min=c[vh[i]][j];
32.
dinhdau=vh[i];
33.
dinhcuoi=j;
34.
35.
daxet[dinhcuoi]=1;
36.
vh[++sodinh]=dinhcuoi;
37.
tong=tong+c[dinhdau][dinhcuoi];
38.
cout<<dinhdau<<"," <<dinhcuoi<<endl;
39.
40.
41.
42.
void main()
43.
44.
clrscr();
96
45.
readfile();
46.
prim();
47.
}
PRIM1.INP
PRIM1.OUT
?
0 33 17 0 0 0
3 3 0 18 20 0 0
17 18 0 16 4 0
0 20 16 0 9 8
0 0 4 9 0 14
0 0 0 8 14 0
97
CHNG VI
a(v
I =1
i 1
, vi )
}
}
Ch rng phc tp tnh ton ca thut ton l O(n2), do tm nh u ta phi xt qua
tt c cc nh ca th. Tt nhin, ta cng c th s dng k thut ghi nhn ng i
trnh by trong chng 3: dng bin mng Truoc[v], v V, ghi nh nh i trc v
trong ng i tm kim.
Cng cn lu thm l trong trng hp trng s trn cc cnh l khng m, bi ton tm
ng i ngn nht trn th v hng c th dn v bi ton trn th c hng, bng
cch thay i mi cnh ca n bi n bi hai cung c hng ngc chiu nhau vi cng
trng s l trng s ca cc cnh tng ng. Tuy nhin, trong trng hp c trng s m,
vic thay nh vy c th dn n chu trnh m.
6.2.NG I NGN NHT XUT PHT T MT NH
Phn ln cc thut ton tm khong cch gia hai nh s v t c xy dng nh k thut
tnh ton m ta c th m t tng quan nh sau: t ma trn trng s a[u][v], u,v V, ta
tnh cn trn d[v] ca khong cch t s n tt c cc nh v V. Mi khi pht hin
d[u] + a[u][v] < d[v] (1)
cn trn d[v] s c lm tt ln: d[v] + a[u][v].
Qu trnh s kt thc khi no chng ta khng lm tt thm c bt k cn trn no.
Khi , r rng gi tr ca mi d[v] s cho khong cch t nh s n nh v. Khi th hin
k thut tnh ton ny trn my tnh, cn trn d[v] s c gi l nhn ca nh v, cn
vic tnh li cc cn ny s c gi l th tc gn. Nhn thy rng tnh khong cch
t s n t, y, ta phi tnh khong cch t s n tt c cc nh cn li ca th. Hin
nay vn cha bit thut ton no cho php tm ng i ngn nht gia hai nh lm vic
thc s hiu qu hn nhng thut ton tm ng i ngn nht t mt nh n tt c cc
nh cn li.
S tnh ton m ta va m t cn cha xc nh, bi v cn phi ch ra th t cc nh u
v v kim tra iu kin (1). Th t chn ny c nh hng rt ln n hiu qu ca
thut ton.
By gi ta s m t thut ton Ford-Bellman tm ng i ngn nht t nh s n tt c
cc nh cn li ca th. Thut ton lm vic trong trng hp trng s ca cc cung l
tu , nhng gi thit rng trong th khng c chu trnh m.
100
void Ford_Bellman()
(*
u vo:
th c hng G = (V,E) vi n nh, s V l nh xut pht, a[u][v], u, v
V, ma trn trng s;
Gi thit: th khng c chu trnh m.
u ra:
Khong cch t nh s n tt c cc nh cn li d[v], v V.
Trc[v], v V, ghi nhn nh i trc v trong ng i ngn nht t s n
v.
*)
(* Khi to *)
for v V
{
d[v]=a[s][v];
Truoc[v]=s;
};
d[s]=0;
for k=1 to n-2
for v V\{s}
for u V
if (d[v] > d[u] +a[u][v] )
{
d[v]=d[u]+a[u][v];
Truoc[v]=u;
}
}
Tnh ng n ca thut ton c th chng minh trn c s trn nguyn l ti u ca quy
hoch ng. R rng l phc tp tnh ton ca thut ton l O(n3). Lu rng chng ta
c th chm dt vng lp theo k khi pht hin trong qu trnh thc hin hai vng lp trong
khng c bin d[v] no b i gi tr. Vic ny c th xy ra i vi k<n-2, v iu lm
101
tng hiu qu ca thut ton trong vic gii cc bi ton thc t. Tuy nhin, ci tin
khng thc s ci thin c nh gi phc tp ca bn thn thut ton. i vi th
tha tt hn l s dng danh sch k Ke(v), v V, biu din th, khi vng lp
theo u cn vit li di dng
for u Ke(v)
if (d[v] > d[u] + a[u][v] )
{
d[v]=d[u]+a[u][v];
Truoc[v]=u;
}
Trong trng hp ny ta thu c thut ton vi phc tp O(n,m).
Th d 1.
Xt th trong hnh 1. Cc kt qu tnh ton theo thut ton c m t trong bng di
y
(3)
A=
-5
d[2] Truoc[2]
d[3] Truoc[3]
d[4] Truoc[4]
d[5] Truoc[5]
0,1
1,1
,1
,1
3,1
0,1
1,1
4,2
4,2
-1,3
0,1
1,1
4,2
3,5
-1,3
0,1
1,1
4,2
3,5
103
A B C
L
0 2
A A
1
A A A
A B C
L
0 2
A A
D E
4
F A
F
L
1
A
6
F
F
L
1
A
6
F
A B C D E F
L L L
L
0 2 4 4 6 1
A B F B A
6
F
5
A
A B C
L L L
0 2 4
A B
D E
L
4 6
F B
F
L
1
A
6
F
5
C
104
A B C
L L L
0 2 4
A B
D E
L
4 6
F B
F
L
1
A
H
L
5
C
6
F
A B C
L L L
0 2 4
A B
D E
L L
4 6
F B
F
L
1
A
G
6
F
H
L
5
C
A B C
L L L
0 2 4
A B
D E
L L
4 6
F B
F
L
1
A
G
L
6
F
H
L
5
C
105
Void Result()
{
Int I,j ;
Printf(%d <=, t);
I=truoc[t];
While(I !=s)
{
Printf(%d <=, i);
I=truoc[i];
}
Printf(%d,s);
Printf(\n Do dai duong di la :%d,d[t]);
getch() ;
}
//----------------------------------------------------Void Dijkstra()
{
Int v,u,minp ;
Printf( \n Tim duong di tu s= ) ;
Scanf( %d ,&s) ;
Printf(( den);scanf(%d,&t);
For(v=1 ;v<=n ;v++)
{
d[v]=CP[s][v] ;
truoc[v]=s;
final[v]=false;
}
Truoc[s]=0 ;
D[s]=0;
Final[s]=TRUE;
While (!final[t])
{
Minp=2000;
For(v=1;v<=n;v++)
{
If(!final[v])&&(minp>d[v]))
107
{
U=v;
Minp=d[v];
}
}
Final[u]=TRUE; // u la dinh co nhan tam thoi nho nhat
If(!final[t])
{
For(v=1;v<=n;v++){
If !(final[v]) &&(d[u]+CP[u][v]<d[v]))
{
D[v]=+CP[u][v];
Truoc[v]=u;
}
}
}
}
}
}
//------------------------------------------------------------Void main()
{
Clrscr();
Init();
Disktra();
Result();
Getch();
}
nh l 1.
Thut ton Dijkstra tm c ng i ngn nht trn th sau thi gian c O(n2).
Ch :
Nu ch cn tm ng i ngn nht t s n mt nh t no th c th kt thc thut
ton khi nh t tr thnh c nhn c nh.
4. NG I NGN NHT GIA TT C CC CP NH
108
if (d[i][j]>d[i][k]+d[k][j])
{
d[i][j]=d[i][k]+d[k][j];
}
}
R rng phc tp tnh ton ca thut ton l O(n3).
Pk[i,j]=Pk-1[i,k]
Nu khng , Wk[i,j]=Wk-1[i,j]
V
Pk[i,j] =Pk-1[i,j]
Ta thy rng khi gii thut kt thc, ngoi ma trn khong cch ngn nht ni hai
nh ca th, ta cn c thm ma trn P=Pn cho ta xc nh ng ngn nht ny,
t Vi n Vj nh sau :
I, P*[i,j], P*[P[i,j],j],....., P*[P*[i,j],j],....,j
V d. Xt th c hng sau
Ta c :
7
W0
=
4
5
7
11
2
6
P0
=
1
3
3
3
4
110
Xt dng 1 , ct 1
7
W1
5
7
=
4
5
7
13
6
P1
3
3
=
1
3
3
2
4
Xet dng 2 , ct 2
W2
=
4
P2
=
1
Xt dng 3 , ct 3
W3
5
7
13
6
17
10
7
7
5
7
P3
3
3
2
4
2
4
2
4
3
3
2
4
Xt dng 4 , ct 4
W*=
W4
P4
FILE *f;
//---------------------------------------------------------------Void Init()
{
f=fopen(Floy1.INP,rt);
if(f==NULL)
{
Printf(\n khong co File *.INP);
Getch();
Return ;
}
for(i=1; i<=n;i++)
for(j=1;j<=n;j++)
A[i][j]=0;
fscanf(f,%d, &CP[I,j]);
printf(%d%d%d,&n,&u,&v);
printf(\n so dinh cua DOTHI %d,n);
printf(\n Duong di tu dinh %d den dinh %d la:,u,v);
printf(\n ma tran trong so);
for(i=1i<=n;i++)
{
FOR(J=1;J<=N;J++)
{
fscanf(f,%d,&A[i][j]);
printf(%d5d,A[i][j]);
if(I !=j && A[i][j]==0)
A[i][j]=MAX;
}
}
f close(f);
getch();
}
//----------------------------------------------Void Result()
{
If(D[u][v]>=MAX)
112
{
printf(\n khong co duong di);
getch();
return;
}
Else
{
Printf(\n duong di ngan nhat :%d,D[u][v])
Printf(\n Dinh %3d,u);
While(u!=v)
{
Printf(%3d,u);
While(u!=v)
{
Printf(%3d,S[u][v];
U=S[u][v];
}
}
}
//--------------------------------------------------------Void Floy()
{
Int I,j,k,Found;
For(i=1;i<=n;i++)
{
For(j=1;j<=n;j++)
{
D[i][j]=A[i][j];
If(D[i][j]==A[MAX) S[i][j]=0;
Else
S[i][j]=j;
}
}
// Mang D[i,j] la mang chua cac gia tri khoang cach ngan nhat tu I den j
// MangS[i,j] la mang chua gia tri phan tu ngay sau cua i tren duong di ngan nhat
// tu i den j
113
For(k=1;k<=n;k++)
{
For(i=1 ;i<=n;i++)
{
For(j=1;j<=n;j++)
If( ( D[i][j]!=MAX ) && (D[i][k]>D[k][j]))
{
// tim D[I,j] nho nhat co the
D[i][j]=D[j][k]+D[k][j];
S[i][j]=S[i][k];
// ung voi phan tu ngay sau i
}
}
}
}
}
//------------------------------------------------------------Void main()
{
Clrscr(); Init();
Floy();
Result();
Getch();
}
114
BI TP CHNG VI
Bi tp thc hnh:
6-1.Di chuyn gia cc o
Trn mt o quc, c N hn o. Gi s tt c cc o u c hnh dng l hnh ch nht
nm ngang. Trn mi hn o c th c sn bay nm trung tm o, c th c cng nm
4 gc o. Trn mi o u c tuyn ng xe but ni 4 gc o vi nhau v vi trung
tm o. Gia 2 o c th i li bng my bay nu c 2 o u c sn bay v c th i
li bng tu nu c 2 o u c cng.
Gi s rng:
Cc tuyn ng (b, khng, thy) u l ng thng.
Chi ph cho mi km v tc ca mi loi phng tin l:
Phng tin
Tc (km/h)
Chi ph (/km)
My bay
1000
1000
Xe but
70
100
Tu thy
30
50
116
CHNG 7
BI TON LUNG CC I TRONG MNG
Bi ton lung cc i trong mng l mt trong s bi ton ti u trn th tm c
nhng ng dng rng ri trong thc t cng nh nhng ng dng th v trong l thuyt t
hp. Bi ton c xut vo u nm 1950, v gn lin vi tn tui ca hai nh ton
hc M l Ford v Fulkerson. Trong chng ny chng ra s trnh by thut ton Ford Fulkerson gii bi ton t ra v nu mt s ng dng ca bi ton.
7. 1. MNG. LUNG TRONG MNG. BI TON LUNG CC I
7.1.1. nh ngha
Ta gi mng l th c hng G=(V,E), trong duy nht mt nh a khng c cung i
vo gi l nh pht, duy nht mt nh z khng c cung i ra gi l im thu v mi cung
e=(v,w) E c gn vi mt s khng m c(e) =c(v,w) gi l kh nng thng qua ca
cung e.
thun tin cho vic trnh by ta s qui c rng nu khng c cung (v,w) th kh nng
thng qua c(v,w) c gn bng 0.
7.1.2. nh ngha
Mng ( network) l mt n th c hng c trng s G=(V,E) trn chn mt
nh a gi l nh pht ( source vertex) v mt nh z gi l nh thu (sink vertex).
Xt mt th G=(V,E) vi nh pht a v nh thu z , Gi c(e) l trng s ca cnh c(e)
( c(e) N) . Vi mi nh x, t :
In(x) = { eE e ti trong x }
Out(x) = { eE e ti ngoi x }.
Mt hm ti ( flow function) trn G l mt hm :
117
(e) c(e) , e E
ii)
iii)
(e)
e In(x)
, x V\ {a,z}
e out(x)
(P, P
e (P, P )
( P ,P)
e( P ,P)
Chng minh :
(e)
(e)
x P , e In(x)
x P , e out(x)
(e)
e (P, P )
(e)
e( P ,P)
Ngha l :
(e)
(e)
e out(x)
e In(x)
c(e)
e (P, P )
7.1.7 nh ngha :
118
Nh sau:
0 Neu e khng thuc K
k(e)=
Nu e K v c hng thun t a ti z
-1 Nu eK v c hng nghch t z ti a
. Ri quay v bc 1.
7.1.9 nh l p dng thut ton FORD-FULKERSON vo mng G . Khi gii thut kt thc
th l hm ti ti i v (P, P ) l mt php ct a-z ti thiu ca G .
119
Xt nh a . Thc hin ghi nhn cho nh a . Khng c cnh no ti trong a c , cn hai cnh
ngoi a l ab v ac .
120
Vi l hm ti bng 0 trn G
Xt nh a . Khng c nh no ti trong a c
Lp li th tc trn
Gn li nhn cho a l (- , )
Xt nh a.
t nhn cho b l ( a+,2) , nhn cho c l (a+,4) , nhn cho d l (a+,7).
Xt nh b.
t nhn cho e l ( b+,2)
Xt nh c.
t nhn cho f l (c+,3)
Xt nh f : t nhn cho z l (f+,3).
122
Lp li th tc trn .
Xt nh a. t nhn cho a l (-, )
123
124
PathFound=0;
}
void Inc_Flow()
(* Tng hm ti theo dy chuyn (a-z) K *)
v=p[t]; u=t; tang= [t];// (z) = [t]
while u<> s
{
if v>0 then
f[v,u] = f[v,u] + tang;
else
{
v = -v;
f[u,v] = f[u,v] - tang;
}
u = v;
v = p[u];
}
}
Thut ton Ford_Fulkerson c thc hin nh th tc:
void Max_Flow()
(*Thut ton Ford_Fulkerson *)
(* Khi to: Bt u t lung vi gi tr 0 *)
for u V
for v V
f[u,v] = 0;
stop=0;
while (!stop)
{
find_path;
if pathFound
Inc_Flow
127
else stop=1;
}
<Lung cc i trong mng l f[u,v], u, v V >
<Lt ct hp nht l (VT, V\VT)>
}
BI TP CHNG VII
128
Bi tp l thuyt
Thc hin thut ton Ford-Fulkerson tm lung cc i trong mng ca cc hnh v sau.
Trnh by cc kt qu tnh ton trong mi bc lp bao gm :
- th tng lung (mng thng d)
-ng tng lung (ng i b sung) tm c theo tm kim theo chiu rng v kh
nng thng qua ca n (gi thit khi duyt cc nh k ca mt nh ta duyt theo th t
tng dn ca ch s).
-Mng cng lung tm c sau khi tng lung.
Kt qu cui cng: Cn a ra gi tr lung cc i.
7-1.
5,6
2
5,5
6,6
1,3
1
1,6
0,3
2,5
7-2.
1,1
0,5
5
4
0,18
0,7
0,2
0,2
0,3
0,15
0,8
7-3.
0,9
V4
V2
0,2
6,6
V6
0,2
4,4
10,10
4,5
6,8
0,3
0,1
0,2
6,9
4,4
10,10
Bi tp thc hnh
4,9
V3
V5
V7
129
#include <conio.h>
2.
#include <stdio.h>
3.
#include <iostream.h>
4.
5.
int c[max][max],f[max][max],d[max],p[max];
6.
int pathfound,n,m,s,t;
7.
void Nhapsolieu()
8.
9.
FILE *ftext;
10.
int u,v;
11.
clrscr();
12.
ftext=fopen("D:\\DOTHI\\FM.inp","rt");
13.
fscanf(ftext,"%d%d%d%d",&n,&m,&s,&t);
14.
15.
16.
fscanf(ftext,"%d",&u);
17.
fscanf(ftext,"%d",&v);
18.
fscanf(ftext,"%d",&c[u][v]);
19.
20.
fclose(ftext);
130
21.
22.
23.
24.
if (a< b) return a;
25.
return b;
26.
27.
void Find_path()
28.
29.
int nvt=1,u,vt[max];
30.
31.
{p[i]=0;d[i]=0;}
32.
p[s]=s;
33.
d[s]=max;
34.
vt[nvt]=s;
35.
pathfound=1;
36.
while (nvt!=0)
37.
38.
u=vt[nvt--];
39.
40.
if (p[v]==0)
41.
42.
43.
44.
p[v]=u;
45.
d[v]=min(d[u],c[u][v]-f[u][v]);
46.
vt[++nvt]=v;
47.
if (v==t) return;
48.
49.
50.
51.
p[v]=-u;
52.
d[v]=min(d[u],f[v][u]);
131
53.
vt[++nvt]=v;
54.
if (v==t) return;
55.
56.
57.
58.
pathfound=0;
59.
60.
void Inc_flow()
61.
62.
int v=p[t],u=t,tang=d[t];
63.
while (u!=s)
64.
65.
if (v>0) f[v][u]+=tang;
66.
else
67.
68.
v=-v;
69.
f[u][v]-=tang;
70.
71.
u=v;
72.
v=p[u];
73.
74.
75.
void Max_flow()
76.
{int stop=0;
77.
while (stop==0)
78.
79.
Find_path();
80.
if (pathfound==1) Inc_flow();
81.
else stop=1;
82.
83.
84.
void main()
132
85.
86.
Nhapsolieu();
87.
Max_flow();
88.
int valf=0;
89.
90.
if (c[s][u]>0)
91.
valf+=f[s][u];
92.
cout<<"Ma tran c va f ket qua(dinh dau, dinh cuoi,Tai nang, luong tren
canh):\n";
93.
for (u=1;u<=n;u++)
94.
95.
if (c[u][v]>0)
96.
97.
98.
getch();
99.
FM.INP
6916
126
139
231
244
253
357
567
468
543
133
K Thut lp trnh C
134