Professional Documents
Culture Documents
--------------------
IT
BI GING
PT
TON RI RC 2
H Ni 2013
LI GII THIU
Ton ri rc l mt lnh vc nghin cu v x l cc i tng ri rc dng
m cc i tng, v nghin cu mi quan h gia cc tp ri rc. Mt trong nhng yu
t lm Ton ri rc tr nn quan trng l vic lu tr, x l thng tin trong cc h thng
my tnh v bn cht l ri rc. Chnh v l do , Ton hc ri rc l mt mn hc bt
buc mang tnh cht kinh in ca cc ngnh Cng ngh thng tin v in t Vin thng.
Ti liu hng dn mn hc Ton hc ri rc c xy dng c xy dng da trn c
s kinh nghim ging dy mn hc v k tha t gio trnh [1, 2].
Ti liu c trnh by thnh hai phn. Trong , phn I trnh by nhng kin thc
c bn v l thuyt t hp thng qua vic gii quyt bn bi ton c bn l: Bi ton
IT
PT
MC LC
PT
IT
BI TP........................................................................................................... 27
CHNG 3. TM KIM TRN TH......................................................... 31
3.1. Thut ton tm kim theo chiu su (Depth First Search) .................................... 31
3.1.1.Biu din thut ton DFS(u) .......................................................................... 31
3.1.2. phc tp thut ton ................................................................................. 32
3.1.3. Kim nghim thut ton ............................................................................... 33
3.1.4. Ci t thut ton ......................................................................................... 35
3.2. Thut ton tm kim theo chiu rng (Breadth First Search)................................ 37
3.2.1. Biu din thut ton ..................................................................................... 37
3.2.2. phc tp thut ton ................................................................................. 38
3
IT
a) t bi ton................................................................................................................49
b) M t thut ton .........................................................................................................49
c) Kim nghim thut ton..............................................................................................49
d) Ci t thut ton .......................................................................................................51
PT
BI TP........................................................................................................... 63
CHNG 4. TH EULER, TH HAMIL TON.................................... 67
4.1. th Euler, th na Euler.......................................................................... 67
4.2. Thut ton tm chu trnh Euler......................................................................... 67
4.2.1. Chng minh th l Euler .......................................................................... 68
4.2.2. Biu din thut ton tm chu trnh Euler ....................................................... 69
4.2.3. Kim nghim thut ton ............................................................................... 70
4.2.4. Ci t thut ton ......................................................................................... 70
4.3. Thut ton tm ng i Euler......................................................................... 72
4.3.1. Chng minh th l na Euler.................................................................... 72
4.3.2. Thut ton tm ng i Euler...................................................................... 74
BI TP........................................................................................................... 83
CHNG 5. CY KHUNG CA TH ..................................................... 86
PT
IT
BI TP......................................................................................................... 104
CHNG 6. BI TON TM NG I NGN NHT ........................... 106
6.1. Pht biu bi ton.......................................................................................... 106
6.2. Thut ton Dijkstra........................................................................................ 106
6.2.1. M t thut ton ......................................................................................... 107
6.2.2. Kim nghim thut ton ............................................................................. 107
6.2.3. Ci t thut ton ....................................................................................... 109
6.3.Thut ton Bellman-Ford ............................................................................... 111
6.3.1. M t thut ton ......................................................................................... 111
6.3.2. Kim nghim thut ton ............................................................................. 112
6.3.3. Ci t thut ton ....................................................................................... 114
5
PT
IT
BI TP......................................................................................................... 120
IT
PT
Detroit
Chicago
New York
Denver
Los Angeles
Washington
Hnh 1.1. n th v hng.
Trong trng hp gia hai my tnh no thng xuyn truyn ti nhiu thng
tin, ngi ta ni hai my tnh bi nhiu knh thoi khc nhau. Mng my tnh a knh
thoi c th c biu din nh Hnh 1.2.
San Francisco
Detroit
Chicago
New York
Denver
Los Angeles
Washington
Hnh 1.2. a th v hng.
IT
PT
Detroit
Chicago
New York
Denver
Los Angeles
Washington
Hnh 1.3. Gi th v hng.
truy nhp ngc li San Francisco. Hoc my tnh t ti Denver c th truy nhp c
ti my tnh t ti Chicago v ngc li my tnh t ti Chicago cng c th truy nhp
ngc li my tnh ti Denver. m t mng loi ny, chng ta dng khi nim n
th c hng. n th c hng c m t nh trong Hnh 1.4.
San Francisco
Detroit
Chicago
New York
Denver
Los Angeles
Washington
Hnh 1.4. n th c hng.
IT
Detroit
PT
Chicago
New York
Denver
Los Angeles
Washington
Cnh
C cnh bi
C khuyn
1. n th v hng
V hng
Khng
Khng
2. a th v hng
V hng
Khng
3. Gi th v hng
V hng
4. n th c hng
C hng
Khng
Khng
5. a th c hng
C hng
IT
PT
nh c bc 0 c gi l nh c lp. nh bc 1 c gi l nh treo. V vy :
nh g l nh c lp ca th
nh d l nh treo ca th.
nh l 1. Gi s G = <V, E> l th v hng vi m
2m deg(v ) .
cnh. Khi
vV
vO
vU
IT
PT
11
6
8
7
4
11
13
12
10
IT
PT
Li gii.
Cnh (5, 9) l cu v nu loi b (5, 9) th s thnh phn lin thng ca
th tng t 3 ln 4.
Cnh (5, 10) l cu v nu loi b (5, 10) th s thnh phn lin thng ca
th tng t 3 ln 4.
Cnh (6, 7) l cu v nu loi b (6, 7) th s thnh phn lin thng ca
th tng t 3 ln 4.
Cnh (8, 10) l cu v nu loi b (8, 10) th s thnh phn lin thng ca
th tng t 3 ln 4.
Cc cnh cn li khng l cu v nu loi b cnh khng lm tng thnh
phn lin thng ca th.
nh 5 l nh tr v nu loi b nh 5 cng vi cc cnh ni vi nh 5 s
thnh phn lin thng ca th tng t 3 ln 4.
nh 6 l nh tr v nu loi b nh 6 cng vi cc cnh ni vi nh 6 s
thnh phn lin thng ca th tng t 3 ln 4.
nh 10 l nh tr v nu loi b nh 10 cng vi cc cnh ni vi nh 10
s thnh phn lin thng ca th tng t 3 ln 4.
Cc nh cn li khng l tr v nu loi b nh cng vi cc cnh ni vi
nh khng lm tng thnh phn lin thng ca th.
12
IT
PT
vV
vV
13
IT
PT
G1
G2
14
1
2
K3
K4
K5
IT
PT
C3
C4
C5
51
15
3
1
6
1
5
4
IT
PT
16
IT
Bi tp Chng 2.
Bn c c th tm thy nhng kin thc su hn v rng hn trong cc ti liu
[1], [2], [3].
2.1.Biu din th bng ma trn k
PT
ij
2m (m l s
i 1 j 1
cnh ca th.
n
IT
PT
a
i 1 j 1
th.
18
ij
m (m l s cnh ca
IT
PT
1
2
19
Nhc im ca ma trn k:
Lng ph b nh: bt k s cnh nhiu hay t ta cn n2 n v b nh
biu din;
Khng th biu din c vi cc th c s nh ln (v d triu nh);
xem xt nh nh u c nhng nh k no cn mt n php so snh k c
nh u l nh c lp hoc nh treo.
2.1.4. Qui c khun dng lu tr ma trn k
thun tin cho nhng ni dung k tip, ta qui c khun dng d liu biu din
th di dng ma trn k hoc ma trn trng s trong file nh sau:
Dng u tin ghi li s nh ca th;
N dng k tip ghi li ma trn k ca th. Hai phn t khc nhau ca ma trn
k c vit cch nhau mt vi khong trng.
sau:
0
1
0
0
1
0
1
1
1
1
0
1
0
0
0
PT
dothi.in
5
0
1
1
0
1
1
0
1
0
0
IT
0
0
0
1
0
20
nh u
1
1
2
2
2
3
4
4
5
IT
nh cui
2
3
3
4
5
4
5
6
6
PT
nh u nh Cui
1
2
2
3
2
4
2
5
3
1
4
3
4
5
5
6
6
4
21
nh u nh Cui
1
2
2
3
2
4
2
5
3
1
4
3
4
5
5
6
6
4
3
7
PT
IT
Trng S
5
8
6
3
2
7
5
4
3
Trong trng hp th tha (m<6n), biu din bng danh sch cnh tit
kim c khng gian nh;
Thun li cho mt s thut ton ch quan tm n cc cnh ca th.
Nhc im ca danh sch cnh:
22
5
8
6
3
2
7
5
4
3
IT
int
cuoi;
PT
int
} Edge;
nh u
1
1
2
2
2
3
4
4
5
nh cui
2
3
3
4
5
4
5
6
6
23
V d vi danh danh sch cnh ca th Hnh 2.7, biu din danh sch cnh da
vo mng ca th c dng sau:
Cnh:
G[1]
G[2]
G[3]
G[4]
G[5]
G[6]
G[7]
G[8]
G[9]
G[i].dau
G[i].cuoi
2
3
3
4
5
4
5
6
6
i vi th c hng cng c biu din nh trn nhng ta cn ch n
hng ca mi cung. i vi th trng s ta ch cn b sung vo cu trc Edge mt
thnh vin l trng s ca cnh nh sau:
typedef struct { //nh ngha mt cnh c trng s ca th
int
dau;
int
cuoi;
int
trongso;
IT
} Edge;
Edge G[MAX]; //Danh sch trng s cc cnh biu din trong mng G.
Biu din danh danh sch cnh ca th bng danh sch lin kt:
typedef struct canh{ //nh ngha mt cnh ca th
dau;
int
cuoi;
PT
int
} *Edge;
Edge *G; //Cc cnh c ca th biu din bng danh danh sch lin kt G.
V d vi danh danh sch cnh ca th Hnh 2.7, biu din danh sch cnh da
vo danh sch lin kt c dng sau:
1
2
next
1
3
next
4
6
next
5
6
Null
Ke(1) = { 2, 3).
Ke(2) = {1, 3, 4, 5}.
Ke(6) = { 4, 5}.
IT
A[i]=?
PT
10 11 12 13 14 15 16 17 18
on 1
on 2
on 3
on 4
4
on 5
on 6
List[1]:
3 Null
List[2]:
List[3]:
4 Null
List[4]:
List[5]:
6 Null
List[6]:
5 Null
5 Null
6 Null
IT
PT
V d khun dng lu tr danh sch k ca Hnh 2.7 trong file dothi.in nh sau:
dothi.in
6
2
2
6
1
9
1
13
2
16
2
18
4
3
3
2
3
4
5
4
4
5
6
5
6
26
BI TP
6
C
5
4
b. th c hng G2.
PT
a. th v hng G1.
IT
9
F
c. th trng s G3
4. Hy to mt file d liu theo khun dng nh sau:
a. Ma trn k:
-
27
IT
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
PT
10
13
11
12
10
13
IT
12
11
2
2
12
PT
9
6
6
7
10
13
7
11
10. Hy biu din th di y di dng ma trn k, danh sch cnh, danh sch k.
10
12
13
11
29
30
IT
PT
IT
PT
31
Thut ton DFS(u) c th kh qui bng cch s dng ngn xp nh Hnh 3.1
di y:
PT
IT
32
6
8
7
10
11
12
IT
13
Hnh 3.2. th v hng G.
Cc nh duyt:
chuaxet[u]=False
nh bt u
duyt
DFS(2)
PT
DFS(1)
Cc nh cha duyt
chuaxet[u]=True
1, 2
1, 2, 4
1,2,4, 3
1,2,4,3, 6
1,2,4,3, 6,7
DFS(8)
1,2,4,3, 6,7,8
DFS(10)
1,2,4,3, 6,7,8,10
5, 9, 11, 12, 13
DFS(5)
1,2,4,3, 6,7,8,10,5
9, 11, 12, 13
DFS(9)
1,2,4,3, 6,7,8,10,5,9
11, 12, 13
DFS(13)
1,2,4,3, 6,7,8,10,5,9,13
11, 12
DFS(11)
1,2,4,3, 6,7,8,10,5,9,13,11
12
DFS(11)
1,2,4,3, 6,7,8,10,5,9,13,11,12
Kt qu duyt:
DFS(4)
DFS(3)
DFS(6)
DFS(7)
33
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
1
0
0
0
0
0
0
0
1
1
0
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1
1
1
0
0
0
1
0
0
1
0
0
1
0
1
0
0
0
0
1
0
0
0
0
1
1
1
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
1
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
IT
Cc nh c duyt
1, 2
1, 2, 3
1, 2, 3
1, 2, 3, 4
1, 2, 3, 4
1, 2, 3, 4, 7
1, 2, 3, 4, 7
1, 2, 3, 4, 7, 5
1, 2, 3, 4, 7, 5
1, 2, 3, 4, 7, 5, 6
1, 2, 3, 4, 7, 5, 6
1, 2, 3, 4, 7, 5, 6, 12
1, 2, 3, 4, 7, 5, 6, 12
1, 2, 3, 4, 7, 5, 6, 12, 8
1, 2, 3, 4, 7, 5, 6, 12, 8
10
1, 2, 3, 4, 7, 5, 6, 12, 10
1, 2, 3, 4, 7, 5, 6, 12, 8, 10
11
1, 2, 3, 4, 7, 5, 6, 12, 10, 9
1, 2, 3, 4, 7, 5, 6, 12, 8, 10, 9
12
1, 2, 3, 4, 7, 5, 6, 12, 10, 9, 11
1, 2, 3, 4, 7, 5, 6, 12, 8, 10, 9, 11
13
14
PT
1, 2
Ch .
i vi th v hng, nu DFS(u) = V ta c th kt lun th lin thng.
i vi th c hng, nu DFS(u) = V ta c th kt lun th lin thng
yu.
3.1.4. Ci t thut ton
Thut ton c ci t theo khun dng d liu t chc trong file dothi.in c
qui c nh c trnh by trong Mc 2.1.3 nh sau:
Dng u tin ghi li s nh ca th;
N dng k tip ghi li ma trn k ca th. Hai phn t khc nhau ca ma trn
k c vit cch nhau mt vi khong trng.
IT
PT
35
PT
IT
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX];
void Init(void){
int i,j;FILE *fp;
fp=fopen("DOTHI.IN","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
printf("\n");chuaxet[i]=TRUE;
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
void DFS_Dequi(int u){
int v;
printf("%3d",u);chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v])
DFS_Dequi(v);
}
}
void DFS_Stack(int u){
int Stack[MAX], dau=1, s, t;
Stack[dau]=u;chuaxet[u]=FALSE;
printf("%3d",u);
while(dau>0){
s=Stack[dau];dau--;
for(t =1;t<=n; t++){
if(chuaxet[t] && A[s][t]){
printf("%3d",t);
chuaxet[t] = FALSE;
Stack[++dau]=s;
Stack[++dau]=t;break;
}
}
}
}
36
void main(void){
int u ;clrscr();Init();
cout<<"\n Dinh bat dau duyet:";
cin>>u;
DFS_Stack(u);
//DFS_Dequi(u);
getch();
}
3.2. Thut ton tm kim theo chiu rng (Breadth First Search)
3.2.1. Biu din thut ton
IT
rng, vi thut ton tm kim theo chiu su, nh thm cng mun s tr
thnh nh sm c duyt xong. l kt qu tt yu v cc nh thm c np vo
stack trong th tc qui. Khc vi thut ton tm kim theo chiu su, thut ton tm
kim theo chiu rng thay th vic s dng stack bng hng i (queue). Trong th tc
ny, nh c np vo hng i u tin l u, cc nh k vi u l ( v1, v2, . . ., vk) c
np vo hng i nu nh n cha c xt n. Qu trnh duyt tip theo c bt u
t cc nh cn c mt trong hng i.
PT
37
1
0
1
1
0
1
0
0
0
0
0
0
0
1
1
0
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1
1
1
0
0
0
1
0
0
1
0
0
1
0
1
0
0
0
0
1
0
PT
IT
V d 3. Cho th gm 13 nh c
biu din di dng ma trn k nh hnh
bn phi. Hy cho bit kt qu thc hin
thut ton trong Hnh 3.3 bt u ti nh
u=1? Ch r trng thi ca hng i v tp
nh c duyt theo mi bc thc hin
ca thut ton?
0
0
0
1
1
1
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
1
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
2, 3, 4
1
3, 4, 6
1, 2
4, 6, 5
1, 2, 3
6, 5, 7
1, 2, 3, 4
5, 7, 12
1, 2, 3, 4, 6
7, 12, 8
1, 2, 3, 4, 6, 5
12, 8
1, 2, 3, 4, 6, 5, 7
8, 10
1, 2, 3, 4, 6, 5, 7, 12
10
1, 2, 3, 4, 6, 5, 7, 12, 8
38
11
12
13
14
9, 11, 13
11, 13
13
1, 2, 3, 4, 6, 5, 7, 12, 8,10
1, 2, 3, 4, 6, 5, 7, 12, 8,10, 9
1, 2, 3, 4, 6, 5, 7, 12, 8,10, 9, 11
1, 2, 3, 4, 6, 5, 7, 12, 8,10, 9, 11, 13
IT
PT
39
PT
IT
#include <stdio.h>
#include <conio.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX];FILE *fp;
void Init(void){
int i,j;
fp= fopen("dothi.in","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
printf("\n");chuaxet[i]=TRUE;
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
void BFS(int u){
int queue[MAX], low=1, high=1, v;
queue[low]=u;chuaxet[u]=FALSE;
printf("\n Ket qua:");
while(low<=high){
u = queue[low];low=low+1;
printf("%3d", u);
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v]){
high = high+1;
queue[high]=v;
chuaxet[v]=FALSE;
}
}
}
}
void main(void){
int u;
Init();
printf("\n Dinh bat dau duyet:");
scanf("%d",&u);
BFS(u);
}
40
IT
o Duyt cc nh r nhnh ca cp nh s, t.
PT
41
IT
PT
V d ta cn kim nghim thut ton trn Hnh 3.4 cho th c biu din di
dng ma trn k nh di y.
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
1
0
0
0
1
0
0
0
1
0
0
0
1
0
1
0
1
0
0
0
1
0
1
0
0
0
1
0
1
0
1
0
1
0
1
0
1
0
0
0
1
0
1
0
0
0
1
0
1
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
1
0
1
0
1
0
0
0
1
0
0
0
1
0
1
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
1
0
0
42
d) Ci t thut ton
Chng trnh duyt cc thnh phn lin thng ca th c ci t theo khun
dng d liu biu din di dng ma trn k trong Mc 2.3.1 vi cc th tc sau:
Hm Init() : c d liu theo khun dng v khi u mng chuaxet[u] = True
(1in).
PT
IT
Hm BFS (u), DFS(u) : Hai thut ton duyt theo chiu rng v duyt theo
chiu su c s dng xc nh cc thnh phn lin thng.
#include <stdio.h>
#include <conio.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX], solt=0;
void Init(void){
int i,j;FILE *fp;
fp=fopen("dothi.in","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
printf("\n");chuaxet[i]=TRUE;
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
}
}
void BFS(int u){
int queue[MAX],low=1,high=1, s,t;
queue[low]=u;chuaxet[u]=FALSE;
while(low<=high){
s = queue[low];low=low+1;
printf("%3d", s);
for(t=1; t<=n; t++){
if(A[s][t] && chuaxet[t]){
high = high+1;
queue[high]=t;
chuaxet[t]=FALSE;
}
}
}
}
43
IT
PT
44
PT
IT
45
IT
PT
STT
1, 2
1, 2, 3
truoc[3] = 2
1, 2, 3, 4
truoc[4] =3
1, 2, 3, 4, 7
truoc[7] =4
1, 2, 3, 4, 7, 5
truoc[5] =7
1, 2, 3, 4, 7, 5, 6
truoc[6] =5
1, 2, 3, 4, 7, 5, 6, 12
truoc[12] =6
1, 2, 3, 4, 7, 5, 6, 12, 8
truoc[8] =12
10
1, 2, 3, 4, 7, 5, 6, 12, 10
truoc[10] =12
11
1, 2, 3, 4, 7, 5, 6, 12, 10, 9
truoc[9] =10
truoc[2] =1
46
Truoc[s]=?
12
1, 2, 3, 4, 7, 5, 6, 12, 10, 9, 11
truoc[11] =9
13
truoc[13] =11
14
Kt qu ng i t nh 1 n nh 13: 13->11-9-10-12-6-5-7-4-3-2-1.
IT
PT
STT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Kt qu ng i: 13-10-12-6-2-1.
Ch .
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX], truoc[MAX], s, t;
void Init(void){//c d liu v khi u cc bin
int i,j;FILE *fp;
fp=fopen("dothi.in","r");
fscanf(fp,"%d",&n);
printf("\n So dinh do thi:%d",n);
for(i=1; i<=n; i++){
47
printf("\n");chuaxet[i]=TRUE;truoc[i]=0;
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
printf("%3d",A[i][j]);
}
PT
IT
}
}
void DFS(int u){//Thut ton DFS
int v;
printf("%3d",u);chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v]){
truoc[v]=u;DFS(v);
}
}
}
void BFS(int i){//Thut ton BFS
int queue[MAX], low=1, high=1, u, v;
queue[low]=i;chuaxet[i]=FALSE;
while(low<=high){
u = queue[low];low=low+1;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v]){
high = high+1;queue[high]=v;
truoc[v]=u; chuaxet[v]=FALSE;
}
}
}
}
void Duongdi (void){
if (truoc[t]==0){
printf("\n Khong ton tai duong di");
getch(); return;
}
printf("\n Duong di:");
int j = t;printf("%3d<=",j);
while(truoc[j]!=s){
printf("%3d<=",truoc[j]);j=truoc[j];
}
printf("%3d",s); getch();
}
48
IT
b) M t thut ton
PT
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
Bng 3.5. Kim nghim thut ton kim tra tnh lin thng mnh.
DFS(u)=?//BFS(u)=?
IT
nh uV
DFS(u) =V?
Yes
2V
Yes
3V
Yes
4V
Yes
PT
1V
5V
Yes
6V
Yes
7V
Yes
8V
Yes
9V
Yes
10V
Yes
11V
Yes
12V
Yes
13V
Yes
50
d) Ci t thut ton
Thut ton c ci t theo khun dng th c qui c trong Mc 2.3.1 vi
cc th tc sau:
Th tc Read-Data()
Th tc ReInit()
Th tc DFS(u)
Th tc BFS(u)
PT
IT
queue[high]=t;
chuaxet[t]=FALSE;
}
}
}
PT
IT
}
//Thuat toan DFS
void DFS(int u){
int v;//printf("%3d",u);
chuaxet[u]=FALSE;
for(v=1; v<=n; v++){
if(A[u][v] && chuaxet[v])
DFS(v);
}
}
//Khoi dau lai mang chuaxet[]
void ReInit(void) {
for (int i=1; i<=n; i++)
chuaxet[i]=TRUE;
}
//Kiem tra so lien thong >1?
int Test_So_Lien_Thong(void) {
for(int u=1; u<=n; u++)
if(chuaxet[u]) return(1);
return(0);
}
//Kiem tra tinh lien thong manh
int Strong_Conective (void) {
Read_Data(); ReInit();
for (int u=1; u<=n; u++){
chuaxet[u]=FALSE;
if(u==1) DFS(2);//BFS(2);
esle DFS(1); //BFS(1);
if(Test_So_Lien_Thong()) return(0);
ReInit();
}
return(1);
}
void main(void){
if(Test_LT_Manh())
printf("\n Do thi lien thong manh");
else
printf("\n Do thi khong lien thong manh");
}
52
3.3.4. Duyt cc nh tr
a) t bi ton
Cho th v hng lin thng G =<V, E>. nh uV c gi tr nu loi b
nh u cng vi cc cnh ni vi u lm tng thnh phn lin thng ca th. Bi ton
t ra l xy dng thut ton duyt cc nh tr ca th v hng G =<V, E> cho
trc?
b) M t thut ton
Khng hn ch tnh tng qut ca bi ton ta c th gi thit th cho ban u
l lin thng. Trong trng hp th khng lin thng, bi ton duyt tr thc cht gii
quyt cho mi thnh phn lin thng ca th.
IT
PT
53
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
IT
nh vV
DFS(u) V\v?
No
2V
No
3V
DFS(1) = 1, 2, 4
Yes
4V
No
PT
1V
5V
DFS(1) = 1, 2, 3, 4
Yes
6V
No
7V
No
8V
No
9V
DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8
Yes
10V
DFS(1) = 1, 2, 3, 4, 5, 6, 7, 8, 9
Yes
11V
No
12V
No
13V
No
54
Th tc Read-Data()
Th tc ReInit()
Th tc DFS(u)
Th tc BFS(u)
PT
IT
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int A[MAX][MAX], n,chuaxet[MAX], solt=0;
//Doc du lieu
void Read_Data(void){
int i,j;FILE *fp;
fp=fopen("dothi.IN","r");
fscanf(fp,"%d",&n);
for(i=1; i<=n; i++){
printf("\n");
for(j=1; j<=n; j++){
fscanf(fp,"%d",&A[i][j]);
}
}
}
//Thuat toan BFS
void BFS(int u){
int queue[MAX],low=1,high=1, s,t;
queue[low]=u;chuaxet[u]=FALSE;
while(low<=high){
s = queue[low];low=low+1;
//printf("%3d", s);
for(t=1; t<=n; t++){
if(A[s][t] && chuaxet[t]){
high = high+1;
queue[high]=t;
chuaxet[t]=FALSE;
}
}
}
}
55
PT
IT
56
IT
PT
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
57
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
Cnh eE
DFS(u) V?
No
(1,3)E
No
(1,4)E
No
(2,3)E
No
(2,4)E
No
(3,4)E
No
(3,5)E
DFS(1) = 1, 2, 3, 4, 5
Yes
(5,6)E
No
(5,7)E
No
(5,8)E
No
(5,9)E
No
(6,7)E
No
(6,9) E
No
(7,8) E
No
(8,9) E
No
(9,10) E
DFS(1) =1, 2, 3, 4, 5, 6, 7, 8, 9
Yes
No
No
No
No
No
No
PT
IT
(1,2)E
58
Th tc Read-Data()
Th tc ReInit()
Th tc DFS(u)
Th tc BFS(u)
PT
IT
59
PT
IT
60
PT
IT
61
3.5. Mt s im cn ghi nh
IT
PT
62
BI TP
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
1
0
1
0
0
0
1
0
1
0
0
0
1
0
1
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
1
0
1
0
1
0
0
0
1
0
0
0
1
0
1
0
0
0
1
0
0
0
1
IT
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
PT
0
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
63
0
0
0
1
0
1
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
1
0
0
0
1
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
1
0
1
0
0
0
1
0
0
0
0
1
1
1
1
0
0
0
0
1
0
1
0
0
0
1
0
1
0
1
0
1
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
1
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
PT
IT
64
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
1
0
0
0
0
1
1
1
1
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
PT
IT
65
0
1
0
0
0
0
1
1
1
1
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
b) Tm BFS(5) =?
PT
a) Tm BFS(1) =?
IT
d) Tm DFS(5) =?
e
c
IT
G1
G2
G3
PT
c
H1
H2
H3
1
0
1
0
1
1
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
1
0
0
0
0
1
0
0
0
1
1
0
0
1
0
0
0
1
1
0
0
1
1
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
0
0
0
0
PT
IT
- V BFS(1) = { 1, 2, 6, 3, 5, 7, 4, 11, 8,
10, 12, 9, 13} = V. Do vy, G lin
thng.
- Ta li c :
deg(1) = deg(13) = 2.
deg (2) = deg(3) = 4
deg(4) = deg(5) = 4
deg(6) = deg(7) = 4
deg(8) = deg(9) = 4
deg(10) = deg(11) = deg(12) = 4
Ch : Tng cc phn t ca hng u (ct
u) l bc ca nh u. V d tng cc
phn t ca hng 1 l 2 nn deg(1) = 2.
0
0
0
1
1
1
0
1
0
0
0
0
0
0
0
0
1
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
1
0
0
0
0
0
0
0
1
1
0
1
1
0
0
0
1
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
1
0
0
0
0
0
0
0
0
1
0
0
1
0
68
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
IT
tm mt chu trnh Euler trn th, ta thc hin theo thut ton trong Hnh 4.3
di y:
PT
69
Bc
IT
1, 2
1, 2, 3
1, 2, 3, 4
1, 2, 3, 4,7
1, 2, 3, 4,7,5
1, 2, 3, 4,7,5,2
1, 2, 3, 4,7,5,2,6
1, 2, 3, 4,7,5,2,6,1
1, 2, 3, 4,7,5,2,6
1
1, 2, 3, 4,7,5,2,6,5
1
1, 2, 3, 4,7,5,2,6,5,3
1
1, 2, 3, 4,7,5,2,6,5,3,11
1
1, 2, 3, 4,7,5,2,6,5,3,11,4
1
1, 2, 3, 4,7,5,2,6,5,3,11,4,8
1
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,7
1
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,7,6
1
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,7
1,6
1, 2, 3, 4,7,5,2,6,5,3,11,4,8
1,6,7
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9
1,6,7
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10
1,6,7
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,8
1,6,7
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12,9
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12,9,13
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12,9,13,12
1,6,7,8
1, 2, 3, 4,7,5,2,6,5,3,11,4,8,9,10,11,12,9,13,12,10
1,6,7,8
a ln lt cc nh trong Stack sang CE cho n khi stack=
30 -..
CE = 1, 6, 7, 8, 10, 12, 13, 9, 12, 11, 10, 9, 8, 4, 11, 3, 5, 6, 2, 5, 7, 4, 3, 2, 1
Lt ngc li cc nh trong CE ta c chu trnh Euler
1- 2- 3- 4- 7-5-2-6-5-3-11-4-8-9-10-11-12-9-13-12-10-8-7-6-1
PT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Gi tr CE
70
PT
IT
71
IT
PT
}
void main(void){
clrscr(); Init();
if(Kiemtra())
Tim();
else printf("\n Khong co chu trinh Euler");
}
1
0
1
0
1
1
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
1
0
0
0
0
1
0
1
0
1
1
0
1
1
0
0
1
1
1
1
0
1
1
0
0
0
0
0
0
IT
1
1
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
1
0
0
0
0
0
0
0
0
1
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
1
0
0
0
1
0
0
0
1
1
0
1
1
1
0
0
1
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
PT
73
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
1
0
1
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
PT
IT
74
1
1, 2
1, 2, 3
1, 2, 3, 4
1, 2, 3, 4,7
1, 2, 3, 4,7,5
1, 2, 3, 4,7,5,3
1, 2, 3, 4,7,5,3,11
1, 2, 3, 4,7,5,3,11,10
1, 2, 3, 4,7,5,3,11,10,8
1, 2, 3, 4,7,5,3,11,10,8,4
1, 2, 3, 4,7,5,3,11,10,8,4,10
1, 2, 3, 4,7,5,3,11,10,8,4,10,12
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9,10
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9,10,13
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9,10
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13,9
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12,13
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11,12
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4,11
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,4
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,6
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,6,2
1, 2, 3, 4,7,5,3,11,10,8,4,10,12,9,8,7,6,1,5,6,2,5
Gi tr dCE
IT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
PT
Bc
13,
13,10
13,10,9
13,10,9,13
13,10,9,13,12
13,10,9,13,12,11
13,10,9,13,12,11,4
13,10,9,13,12,11,4
13,10,9,13,12,11,4
13,10,9,13,12,11,4
75
PT
IT
76
d++;*u=i;
}
}
if(d!=2) return(FALSE);
return(TRUE);
PT
IT
}
void DDEULER(int A[][MAX], int n, int u){
int v, x, top, dCE;
int stack[MAX], CE[MAX];
top=1; stack[top]=u;dCE=0;
do {
v = stack[top];x=1;
while (x<=n && A[v][x]==0)
x++;
if (x>n) {
dCE++; CE[dCE]=v; top--;
}
else {
top++; stack[top]=x;
A[v][x]=0; A[x][v]=0;
}
} while(top!=0);
printf("\n Co duong di Euler:");
for(x=dCE; x>0; x--)
printf("%3d", CE[x]);
}
void main(void){
int A[MAX][MAX], n, u;
clrscr(); Init(A, &n);
if(Kiemtra(A,n,&u))
DDEULER(A,n,u);
else printf("\n Khong co duong di Euler");
getch();
}
4.4. th Hamilton
77
nh ngha. ng i qua tt c cc nh ca th mi nh ng mt ln c
gi l ng i Hamilton. Chu trnh bt u ti mt nh v no qua tt c cc nh cn
li mi nh ng mt ln sau quay tr li v c gi l chu trnh Hamilton. th c
chu trnh Hamilton c gi l th Hamilton. th c ng i Hamilton c gi l
th na Hamilton.
Nh vy, mt th Hamilton bao gi cng l th na Hamilton nhng iu ngc
li khng lun lun ng. V d sau s minh ha cho nhn xt ny.
V d. th thi hamilton G3, na Hamilton G2 v G1.
c
G1
G2
IT
G3
PT
78
5 4
IT
3
G=(V,E)
5 3
3 1 5
PT
1 3
79
IT
PT
}
void Result(void){
int i;
printf("\n ");
for(i=n; i>=0; i--)
printf("%3d", B[i]);
d++;
}
void Hamilton(int *B, int *C, int i){
int j, k;
for(j=1; j<=n; j++){
if(A[B[i-1]][j]==1 && C[j]==0){
B[i]=j; C[j]=1;
if(i<n) Hamilton(B, C, i+1);
else if(B[i]==B[0]) Result();
C[j]=0;
}
}
}
void main(void){
B[0]=1; i=1;d=0; Init();
Hamilton(B,C,i);
if(d==0)
printf("\n Khong co chu trinh Hamilton");
}
80
PT
IT
int j, k;
for(j=1; j<=n; j++){
if(A[B[i-1]][j]==1 && C[j]==0){
B[i]=j; C[j]=1;
if(i<n) Hamilton(B, C, i+1);
else Result();
C[j]=0;
}
}
IT
}
void main(void){
B[0]=1; i=1;d=0;
Init();
Hamilton(B,C,i);
if(d==0)
printf("\n Khong co duong di Hamilton");
getch();
}
PT
82
BI TP
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
1
1
0
0
0
1
0
0
0
0
0
0
1
1
0
0
1
1
0
0
0
0
1
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
1
0
0
0
1
0
1
0
1
0
1
0
1
0
0
0
0
0
0
1
1
0
0
0
1
0
1
0
1
0
0
0
0
0
1
0
1
1
0
0
1
0
0
0
0
0
1
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
0
1
0
1
0
1
0
1
0
0
0
0
0
1
0
0
0
1
0
1
0
1
0
0
0
0
1
0
0
0
0
1
0
1
1
0
0
0
1
0
0
0
0
0
0
1
1
0
0
1
1
0
0
0
0
1
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
1
0
1
0
0
0
0
0
0
1
1
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
1
1
0
0
1
0
0
0
0
0
1
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
0
1
0
1
0
1
0
1
0
0
0
0
0
1
0
0
0
1
0
1
0
1
0
0
PT
IT
83
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
PT
IT
84
Ke(11) = { 2, 7, 8, 13 }.
Ke(12) = { 4, 6, 8, 10 }.
Ke(13) = { 3, 7, 9, 11 }.
IT
Hy thc hin:
a) Xy dng thut ton tm mt ng i Euler ca th?
b) Tm mt ng i Euler ca th? Ch r kt qu trung gian theo mi
bc thc hin ca thut ton?
c) Vit chng trnh tm mt ng i ca th bt u ti nh u?
7. Cho th c hng lin thng yu c biu din di dng danh sch k nh di
y:
Ke(1) = { 6 }.
Ke(5) = { 7 }.
Ke(9) = { 5, 7 }.
Ke(2) = { 3, 8}.
Ke(6) = { 10, 12 }.
Ke(10) = { 2, 3 }.
Ke(3) = { 9, 13 }. Ke(7) = { 11, 13 }.
Ke(11) = { 2, 8 }.
Ke(4) = { 1, 6 }.
Ke(8) = { 4, 12 }.
Ke(12) = { 4, 10 }.
Ke(13) = { 9, 11 }.
Hy thc hin:
a) Tm mt chu trnh Euler bt u ti nh u=1? Ch r kt qu trung gian
theo mi bc thc hin ca thut ton?
b) Tm mt chu trnh Euler bt u ti nh u=7? Ch r kt qu trung gian
theo mi bc thc hin ca thut ton?
c) Vit chng trnh tm mt chu trnh Euler ca th bt u ti nh u?
PT
85
CHNG 5. CY KHUNG CA TH
IT
PT
T1
T2
T3
86
IT
PT
Bi ton 1 c gii quyt bng cc thut ton tm kim c bn: thut ton DFS
hoc BFS. Bi ton 2 c gii quyt bng thut ton Kruskal hoc PRIM.
5.2. Xy dng cy khung ca th da vo thut ton DFS
tm mt cy khung trn th v hng lin thng ta c th s dng k thut
tm kim theo chiu su. Gi s ta cn xy dng mt cy bao trm xut pht ti nh u
no . Trong c hai trng hp, mi khi ta n c nh v tc (chuaxet[v] = False) t
nh u th cnh (u,v) c kt np vo cy khung. K thut xy dng cy khung bt u
ti nh u da vo thut ton DFS c m t trong Hnh 5.2.
5.2.1. M t thut ton
IT
1
1
0
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
PT
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
Tree-DFS(u) =?
T =?
T=
1, 2
T = T(1,2)
1, 2, 3
T = T(2,3)
88
1, 2, 3, 4
T = T(3, 4)
1, 2, 3, 4, 5
T = T(3, 5)
1, 2, 3, 4, 5, 6
T = T(5, 6)
1, 2, 3, 4, 5, 6, 7
T = T(6, 7)
1, 2, 3, 4, 5, 6, 7, 8
T = T(7, 8)
1, 2, 3, 4, 5, 6, 7, 8, 9
T = T(8, 9)
10
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
T = T(9, 10)
11
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
T = T(10, 11)
12
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
T = T(11, 12)
13
T = T(12, 13)
IT
Kt lun T = {(1,2), (2,3), (3,4), (3,5), (5,6), (6,7), (7,8), (8,9), (9,10), (10,11),
(11,12), (12,13)
PT
89
PT
IT
}
void TREE_DFS(int i){
int j; chuaxet[i] = False;
if(sc==n-1) return;
for(j=1; j<=n; j++){
if (chuaxet[j] && A[i][j]){ sc++;
CBT[sc][1]=i; CBT[sc][2]=j;
if(sc==n-1) return;
STREE_DFS(j);
}
}
}
void Result(void){
int i, j;
for(i=1; i<=sc; i++){
printf("\n Canh %d:", i);
for(j=1; j<=2; j++)
printf("%3d", CBT[i][j]);
}
}
void main(void){
int i; Init(); sc=0; i=1; /* xy dng cy bao trm ti nh 1*/
TREE_DFS(i);
if (sc<n-1) printf(\n th khng lin thng);
else Result();
}
5.3. Xy dng cy khung ca th da vo thut ton BFS
tm mt cy khung trn th v hng lin thng ta c th s dng k thut
tm kim theo chiu rng. Gi s ta cn xy dng mt cy bao trm xut pht ti nh u
90
PT
IT
91
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
1
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
T =?
T=
2, 3, 4
3, 4
4, 5
6, 7, 8, 9
7, 8, 9
T = T
8, 9
T = T
10
10
11
11, 12, 13
12
12, 13
T = T
13
13
T = T
14
T = T
IT
Bc
T=T(3,5)
PT
T=T
T = T
T = T(9,10)
Kt lun T = {(1,2), (1,3), (1,4), (3,5), (5,6), (5,7), (5,8), (5,9), (9,10), (10,11),
(10,12), (10,13)
5.3.3. Ci t thut ton
Thut ton Tree-BFS c ci t i vi th c biu din di dng ma trn
k. Cc th tc chnh c ci t bao gm:
92
PT
IT
93
cuoiQ=cuoiQ+1;
QUEUE[cuoiQ]=p;
if(sc==n-1) return;
}
}
}
}
PT
IT
void Result(void){
int i, j;
for(i=1; i<=sc; i++){
printf("\n Canh %d:", i);
for(j=1; j<=2; j++)
printf("%3d", CBT[i][j]);
}
}
void main(void){
int i; Init(); sc=0; i=1; /* xy dng cy bao trm ti nh 1*/
TREE_BFS(i);
if (sc<n-1) printf(\n th khng lin thng);
else Result();
}
5.4. Bi ton xy dng cy khung c di nh nht
Bi ton tm cy khung nh nht l mt trong nhng bi ton ti u trn th c ng
dng trong nhiu lnh vc khc nhau ca thc t. Bi ton c pht biu nh di y.
5.4.1. t bi ton
PT
IT
95
2
1
3
5
5
5
5
5
6
6
6
6
6
7
8
7
7
IT
1
2
7
7
Bc 1: T = ; D(T) = 0;
Bc 2. Sp xp cc cnh theo th t tng dn ca trng s
u
Cui
2
3
4
3
6
7
4
6
5
6
6
10
7
8
9
10
8
9
12
13
10
11
11
12
12
13
Tr.S
2
1
3
2
5
5
4
5
5
5
6
6
6
6
6
6
6
7
7
7
7
7
7
7
8
8
PT
1
1
1
2
2
2
3
3
4
4
5
5
6
6
6
6
7
8
8
8
9
9
10
10
11
12
96
1
1
2
1
3
2
2
3
4
4
5
5
6
6
6
6
7
8
8
8
9
9
10
10
11
12
Cui
3
2
3
4
4
6
7
6
5
6
6
10
7
8
9
10
8
9
12
13
10
11
11
12
12
13
Tr.S
1
2
2
3
4
5
5
5
5
5
6
6
6
6
6
6
6
7
7
7
7
7
7
7
8
8
Bc 3 (lp) :
STT
Cnh c xt
1
E \( 1,3)
2
E = E\(1,2)
3
E = E\(2,3)
4
E = E\(1,4)
5
E = E\(3,4)
6
E = E\(2,6)
7
E = E\(2,7)
8
E = E\(3,6)
9
E = E\(4,5)
10
E = E\(4,6)
11
E = E\(5,6)
12
E = E\(5,10)
13
E = E\(6,7)
14
E = E\(6,8)
15
E = E\(6,9)
16
E = E\(6,10)
17
E = E\(7,8)
18
E = E\(8,9)
19
E = E\(8,12)
20
E = E\(8,13)
21
E = E\(9,10)
22
E = E\(9,11)
Bc lp kt thc v |T|> N-1 =12
PT
IT
T e
T = T(1,3); D(T) = 1
T = T(1,2) ; D(T) = 1+2 =3
To nn chu trnh
T = T(1,4); D(T) = 3 +3 =6
To nn chu trnh
T = T(2,6); D(T) = 6+5=11
T = T(2,7); D(T) = 11+5 =16
To nn chu trnh
T = T (4,5); D(T) = 16+5 =21
To nn chu trnh
To nn chu trnh
T = T(5,10); D(T) = 21+6 =27
To nn chu trnh
T = T(6,8); D(T) = 27+6 =33
T = T(6,9); D(T) = 33+6 =39
To nn chu trnh
To nn chu trnh
To nn chu trnh
T = T(8,12); D(T) = 39+7 =46
T = T(8,13); D(T) = 46+7 =53
To nn chu trnh
T = T(9,11); D(T) = 53+7 =60
Bc 4 : Tr li kt qu:
T = { (1,3), (1,2), (1,4), (2,6), 2,7), (4,5), (5,10), (6,8),(6,9), (8,12), (8,13), (9,11) }
D(T) = 1 + 2 + 3 + 5 + 5 + 5 + 6 + 6 + 6 + 7 + 7 +7 = 60
c) Ci t thut ton
Chng trnh tm cy khung nh nht theo thut ton Kruskal cho th biu din
di dng danh sch trng s c th hin di y vi cc th tc:
Th tc Init(): c d liu biu din bng danh sch trng s.
Th tc Heap(): sp xp cc cnh theo th t tng dn ca trng s bng thut
ton Heap Sort.
Th tc Find(), Union() : tm v kim tra khi kt no cnh vo cy khung c to
nn chu trnh hay khng.
Th tc Result() : a ra tp cnh v di nh nht ca cy khung.
97
PT
IT
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define MAX 50
#define TRUE 1
#define FALSE 0
int n, m, minl, connect;
int
dau[500],cuoi[500], w[500];
int
daut[50], cuoit[50], father[50];
void Init(void){
int i; FILE *fp;
fp=fopen("baotrum1.in","r");
fscanf(fp, "%d%d", &n,&m);
printf("\n So dinh do thi:%d", n);
printf("\n So canh do thi:%d", m);
printf("\n Danh sach ke do thi:");
for(i=1; i<=m;i++){
fscanf(fp, "%d%d%d", &dau[i], &cuoi[i], &w[i]);
printf("\n Canh %d: %5d%5d%5d", i, dau[i], cuoi[i], w[i]);
}
fclose(fp);getch();
}
void Heap(int First, int Last){
int j, k, t1, t2, t3;
j=First;
while(j<=(Last/2)){
if( (2*j)<Last && w[2*j + 1]<w[2*j])
k = 2*j +1;
else
k=2*j;
if(w[k]<w[j]){
t1=dau[j]; t2=cuoi[j]; t3=w[j];
dau[j]=dau[k]; cuoi[j]=cuoi[k]; w[j]=w[k];
dau[k]=t1; cuoi[k]=t2; w[k]=t3; j=k;
}
else j=Last;
}
}
while(father[tro]>0) tro=father[tro];
return(tro);
PT
IT
}
void Union(int i, int j){
int x = father[i]+father[j];
if(father[i]>father[j]) {father[i]=j;father[j]=x; }
else {
father[j]=i; father[i]=x;
}
}
void Krusal(void){
int i, last, u, v, r1, r2, ncanh, ndinh;
for(i=1; i<=n; i++)
father[i]=-1;
for(i= m/2;i>0; i++)
Heap(i,m);
last=m; ncanh=0; ndinh=0;minl=0;connect=TRUE;
while(ndinh<n-1 && ncanh<m){
ncanh=ncanh+1; u=dau[1]; v=cuoi[1];
r1= Find(u); r2= Find(v);
if(r1!=r2) {
ndinh=ndinh+1; Union(r1,r2);
daut[ndinh]=u; cuoit[ndinh]=v;
minl=minl+w[1];
}
dau[1]=dau[last]; cuoi[1]=cuoi[last]; w[1]=w[last]; last=last-1;
Heap(1, last);
}
if(ndinh!=n-1) connect=FALSE;
}
void Result(void){
int i;
printf("\n Do dai cay khung nho nhat:%d", minl);
printf("\n Cac canh cua cay khung nho nhat:");
for(i=1; i<n; i++)
printf("\n %5d%5d",daut[i], cuoit[i]);
}
void main(void){
Init(); Krusal();Result(); getch();
}
5.4.2. Thut ton Prim
99
PT
IT
Bc 3 (Tr li kt qu):
End.
Hnh 5.6. Thut ton PRIM xy dng cy khung nh nht.
b) Kim nghim thut ton
Gi s ta cn kim nghim thut ton cho th trng s Mc 5.4.1. Khi cc
bc thc hin theo thut ton PRIM nh trong Bng di y.
Bc khi to: T =; D(T)=0; V = 2,3,4,5,6,7,8,9,10,11,12,13; VH =1
100
V \v = ?
VH v=?
T, D(T)
2,4,5,6,7,8,9,10,11,12,13
1,3
(1,2)
4,5,6,7,8,9,10,11,12,13
1,2,3
(1,4)
5,6,7,8,9,10,11,12,13
1,2,3,4
(2,6)
5, 7,8,9,10,11,12,13
1,2,3,4,6
(2,7)
5, 8,9,10,11,12,13
1,2,3,4,6,7
(4,5)
8,9,10,11,12,13
1,2,3,4,5, 6,7
(5,10)
8,9,11,12,13
1,2,3,4,5, 6,7,10
(6,8)
9,11,12,13
(6,9)
11,12,13
(8,12)
11,13
T = T(1,3)
D(T) = 0 +1
T = T(1,2)
D(T) = 1+2=3
T = T(1,4)
D(T) = 3+3=6
T = T(2,6)
D(T) = 6+5=11
T = T(2,7)
D(T) = 11+5=16
T = T(4,5)
D(T) = 16+5=21
T = T(5,10)
D(T) = 21+6=27
T = T(6,8)
D(T) = 27+6=33
T = T(6,9)
D(T) = 33+6=39
T = T(8,12)
D(T) = 39+7=46
T = T(8,13)
D(T) = 46+7=53
T = T(9,11)
D(T) = 53+7=60
(9,11)
1,2,3,4,5, 6,7,8,10
1,2,3,4,5, 6,7,8,9,10
1,2,3,4,5, 6,7,8,9,10,12
PT
(8,13)
IT
e=(v,t)|
vV, tVT
c di
nh nht
(1,3)
11
1,2,3,4,5, 6,7,8,9,10,12,13
1,2,3,4,5, 6,7,8,9,10,12,13,11
V = : kt thc bc lp
Kt qu: T = { (1,3), (1,2), (1,4), (2,6), 2,7), (4,5), (5,10), (6,8),(6,9), (8,12), (8,13), (9,11) }
D(T) = 1 + 2 + 3 + 5 + 5 + 5 + 6 + 6 + 6 + 7 + 7 +7 = 60
c) Ci t thut ton
Chng trnh tm cy khung nh nht theo thut ton PRIM cho th biu din
di dng danh sch trng s c th hin di y vi cc th tc:
Th tc Init(): c d liu biu din bng danh sch trng s.
Th tc Prim: Thut ton PRIM xy dng cy khung nh nht.
Th tc Result() : a ra tp cnh v di nh nht ca cy khung.
Chng trnh ci t thut ton Prim tm cy bao trm nh nht c thc hin
nh sau:
101
PT
IT
#include <stdio.h>
#include <conio.h>
#define
TRUE 1
#define FALSE
0
#define MAX 10000
int a[100][100];
int n,m, i,sc,w;
int chuaxet[100];
int cbt[100][3];
FILE *f;
void Init (void){
int p,i,j,k;
for(i=1; i<=n; i++)
for(j=1; j<=n;j++)
a[i][j]=0;
f=fopen("baotrum.in","r");
fscanf(f,"%d%d",&n,&m);
printf("\n So dinh: %3d ",n);
printf("\n So canh: %3d", m);
printf("\n Danh sach canh:");
for(p=1; p<=m; p++){
fscanf(f,"%d%d%d",&i,&j,&k);
printf("\n %3d%3d%3d", i, j, k);
a[i][j]=k; a[j][i]=k;
}
for (i=1; i<=n; i++){
printf("\n");
for (j=1; j<=n; j++){
if (i!=j && a[i][j]==0)
a[i][j]=MAX;
printf("%7d",a[i][j]);
}
}
fclose(f);getch();
}
void Result(void){
for(i=1;i<=sc; i++)
printf("\n %3d%3d", cbt[i][1], cbt[i][2]);
}
void PRIM(void){
int i,j,k,top,min,l,t,u;
int s[100];
102
IT
sc=0;w=0;u=1;
for(i=1; i<=n; i++)
chuaxet[i]=TRUE;
top=1;s[top]=u;
chuaxet[u]=FALSE;
while (sc<n-1) {
min=MAX;
for (i=1; i<=top; i++){
t=s[i];
for(j=1; j<=n; j++){
if (chuaxet[j] && min>a[t][j]){
min=a[t][j];
k=t;l=j;
}
}
}
sc++;w=w+min;
cbt[sc][1]=k;cbt[sc][2]=l;
chuaxet[l]=FALSE;a[k][l]=MAX;
a[l][k]=MAX;top++;s[top]=l;
printf("\n");
}
PT
}
void main(void){
Init();PRIM();Result();
}
5.5. Nhng ni dung cn ghi nh
103
BI TP
0
1
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
PT
IT
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
0
0
0
1
1
1
0
104
IT
PT
105
PT
IT
106
PT
IT
d (u , v) if (u , v) E
- Ma trn trng s khng m A[u , v]
if (u , v ) E
- s l nh bt k ca th.
107
8
2
9
1
9
2
IT
2
9
nh 2
nh 3
nh 4
nh 5
<0,1>
<2,1>
<8,1>
<,1>
<,1>
<2,1>
<4,2>
<,1>
<4,2>
nh 6
nh 7
nh 8
nh 9
nh
10
nh 11
nh
12
nh 13
<,1>
<,1>
<,1>
<,1>
<,1>
<,1>
<,1>
<,1>
PT
Bc
<,1>
<,1>
<11,2>
<,1>
<,1>
<,1>
<,1>
<,1>
<,1>
<10,3>
<,1>
<12,3>
<5,3>
<,1>
<,1>
<,1>
<,1>
<,1>
<,1>
<10,3>
<,1>
<7, 7>
<5,3>
<7, 7>
<,1>
<,1>
<,1>
<,1>
<,1>
<10,3>
<8,6>
<7, 7>
<7,7>
<15,6>
<,1>
<,1>
<,1>
<,1>
<10,3>
<8,6>
<7,7>
<15,6>
<,1>
<,1>
<9,8>
<,1>
<10,3>
<8,6>
<15,6>
<,1>
<,1>
<9,8>
<,1>
<10,3>
<15,6>
<,1>
<,1>
<9,8>
<11,12>
<10,3>
<15,6>
<,1>
<,1>
<11,12>
10
<15,6>
<,1>
<18,13>
<11,12>
11
<15,6>
<21,9>
<18,13>
12
<21,9>
<18,13>
13
<21,9>
Kt qu :
ng i ngn nht t nh 1 n nh 2: 2. ng i: 1-2.
ng i ngn nht t nh 1 n nh 3: 4. ng i: 1-2-3.
ng i ngn nht t nh 1 n nh 4: 10. ng i: 1-2-3-10.
ng i ngn nht t nh 1 n nh 5: 8. ng i: 1-2-3-7-6-5.
108
PT
IT
PT
IT
void Result(void){
int i,j;
printf(\n Duong di ngan nhat tu %d den %d la\n, s,t);
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(void){
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]) ){
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]=d[u]+CP[u][v];
truoc[v]=u;
}
}
}
}
}
110
void main(void){
clrscr();Init();
Result(); getch();
}
Dijkstra();
PT
IT
111
1 5
PT
IT
112
PT
IT
Vng lp K=2:
v=2; D[2] = 1
D[1] + A[1, 2] = 0+1 (Khng nh hn 1)
D[2] + A[2, 2] = 1 + >1
D[3] + A[3, 2] = 4 + >1
D[4] + A[4, 2] = 4 + >1
D[5] + A[5, 2] = -1 + >1
v=3; D[3] = 4
D[1] + A[1, 3] = 0+>4
D[2] + A[2, 3] = 1 + 3 =4 (Khng nh hn 4)
D[3] + A[3, 3] = 4 + >4
D[4] + A[4, 3] = 4 + 2>4
D[5] + A[5, 3] = -1 + >4
v=4; D[4] = 4
D[1] + A[1, 4] = 0+>4
D[2] + A[2, 4] = 1 + 3 =4 (Khng nh hn 4)
D[3] + A[3, 4] = 4 + 1>4
D[4] + A[4, 4] = 4 + >4
D[5] + A[5, 4] = -1 + 4=3< 4 (Thay D[4] = 5, Truoc[4] = 5
v=5; D[5] = -1
D[1] + A[1, 5] = 0+>-1
D[2] + A[2, 5] = 1 + 3 =-1
D[3] + A[3, 5] = 4 + 1>-1
D[4] + A[4, 5] = 3 + >-1
D[5] + A[5, 5] = -1 + >-1
Vng lp K=3:
v=2; D[2] = 1
D[1] + A[1, 2] = 0+1 (Khng nh hn 1)
D[2] + A[2, 2] = 1 + >1
D[3] + A[3, 2] = 4 + >1
D[4] + A[4, 2] = 3 + >1
D[5] + A[5, 2] = -1 + >1
v=3; D[3] = 4
D[1] + A[1, 3] = 0+>4
D[2] + A[2, 3] = 1 + 3 =4 (Khng nh hn 4)
D[3] + A[3, 3] = 4 + >4
D[4] + A[4, 3] = 3 + 2>4
D[5] + A[5, 3] = -1 + >4
v=4; D[4] = 3
D[1] + A[1, 4] = 0+>3
D[2] + A[2, 4] = 1 + 3 =3
113
1
2
3
D[1], Truoc[1] D[2], Truoc[2] D[3], Truoc[3] D[4], Truoc[4] D[5], Truoc[5]
<0,1>
<1,1>
<3,1>
<,1>
<,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>
<-1,3>
IT
K=?
PT
114
if (u==v) C[u][v]=0;
else C[u][v]=MAXC;
for(i=1; i<=m; i++)
fscanf(fp,"%d%d%d",&u,&v,&C[u][v]);
fclose(fp);
PT
IT
}
void Init(void){
int i;
for( i=1; i<=n; i++){
D[i] = C[S][i];
Trace[i]=S;
}
}
void Result(void){
if (D[F]==MAXC) printf("\n Khong co duong di");
else {
printf("\n Do dai %d den %d: %d", S, F, D[F]);
while (F!=S ){
printf("%d <--",F);
F = Trace[F];
}
}
}
void Ford_Bellman(void){
int k, u, v;D[S]=0;
for( k=1; k<=n-2; k++){
for(v=1; v<=n; v++){
// if (v!=S ){
for( u=1; u<=n; u++){
if (D[v]>D[u]+C[u][v]){
D[v] = D[u]+C[u][v];
Trace[u]=v;
}
}
// }
}
}
}
int main()
{
Read_Data();Init();
Ford_Bellman(); Result();
system("PAUSE");
return 0;
115
}
6.4.Thut ton Floy
tm ng i ngn nht gia tt c cc cp nh ca th, chng ta c th s
dng n ln thut ton Ford_Bellman hoc Dijkstra (trong trng hp trng s khng m).
Tuy nhin, trong c hai thut ton c s dng u c phc tp tnh ton ln (ch t l
O(n3)). Trong trng hp tng qut, ngi ta thng dng thut ton Floy.
6.4.1. M t thut ton
Thut ton Floy c m t chi tit trong Hnh 6.3.
PT
IT
116
PT
IT
}
else {
printf(\n Duong di ngan nhat:%d, D[u][v]);
printf(\n Dinh %3d, u);
while(u!=v) {
printf(%3d,S[u][v]);
u=S[u][v];
}
}
PT
IT
}
void Floy(void){
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]==MAX) S[i][j]=0;
else S[i][j]=j;
}
}
/* Mang D[i,j] la mang chua cac gia tri khoan cach ngan nhat tu i den j
Mang S la mang chua gia tri phan tu ngay sau cua i tren duong di
ngan nhat tu i->j */
for (k=1; k<=n; k++){
for (i=1; i<=n; i++){
for (j=1; j<=n; j++){
if (D[i][k]!=MAX && D[i][j]>(D[i][k]+D[k][j]) ){
// Tim D[i,j] nho nhat co the co
D[i][j]=D[i][k]+D[k][j];
S[i][j]=S[i][k];
//ung voi no la gia tri cua phan tu ngay sau i
}
}
}
}
}
void main(void){
clrscr();Init();
Floy();Result();
}
118
IT
PT
119
BI TP
IT
PT
2. Cho C s d liu ghi li thng tin v N Tuyn bay (N<=100) ca mt hng hng
khng. Trong , thng tin v mi tuyn bay c m t bi: im khi hnh
(departure), im n (destination), khong cch (lenght). Departure, destination l mt
xu k t di khng qu 32, khng cha du trng gia, Length l mt s nh hn
32767.
Ta gi Hnh trnh bay t im khi hnh A ti im n B l dy cc hnh trnh [A,
A1, n1], [A1, A2, n2] . . .[Ak, B,nk] vi Ai l im n ca tuyn i nhng li l im khi
hnh ca tuyn i +1, ni l khong cch ca tuyn bay th i (1<=i<k). Trong , khong
cch ca hnh trnh l tng khong cch ca cc tuyn m hnh trnh i qua (n1+n2+.
.+nk).
Cho file d liu kiu text hanhtrinh.in c ghi theo tng dng, s cc dng trong file d
liu khng vt qu N, trn mi dng ghi li thng tin v mt tuyn bay, trong
departure, destination, length c phn bit vi nhau bi mt hoc vi du trng. Hy
tm gii php tho mn nhu cu ca khch hng i t A n B theo mt s tnh hung
sau:
Tm hnh trnh c khong cch b nht t A n B. In ra mn hnh tng im m hnh
trnh qua v khong cch ca hnh trnh. Nu hnh trnh khng tn ti hy a ra
thng bo Hnh trnh khng tn ti.
V d v C s d liu hanhtrinh.in
New_York
Chicago
Chicago
Denver
New_York
Toronto
New_York
Denver
120
1000
1000
800
1900
Toronto
Calgary
1500
Toronto
Los_Angeles 1800
Toronto
Chicago
500
Denver
Urbana
Denver
Houston
Houston
1000
1500
Los_Angeles 1500
Denver
Los_Angeles 1000
PT
IT
Hnh 2
8
1
7
2
Hnh 3
6
3
5
4
4
5
1
8
Hnh 4
2
7
3
6
1
8
7
6
2
3
4
5
Cho file d liu Input.txt ghi li 8 s nguyn trn mt dng, mi s c phn bit
vi nhau bi mt du trng ghi li trng thi ch. Hy tm dy cc php bin i s bn
a trng thi khi u v trng thi ch sao cho s cc php bin i l t nht c th
c.
121
D liu ra c ghi li trong file Output.txt, dng u tin ghi li s cc php bin
i, nhng dng tip theo ghi li tn ca cc thao tc c bn thc hin, mi thao tc c
bn c vit trn mt dng.
Bn s c thm 20 im nu s dng bng mu thch hp ca mn hnh m
t li cc php bin i trng thi ca tr chi. V d vi trng thi ch di y s cho
ta kt qu nh sau:
Input.txt
Output.txt
2 6 8 4 5 7 3 1
7
B
C
A
B
C
IT
C
B
PT
4. Cho mt mng thng tin gm N nt. Trong , ng truyn tin hai chiu trc tip t
nt i n nt j c chi ph truyn thng tng ng l mt s nguyn A[i,j] = A[j,i], vi
A[i,j]>=0, i j. Nu ng truyn tin t nt i1 n nt ik phi thng qua cc nt i2, . . ik-1
th chi ph truyn thng c tnh bng tng cc chi ph truyn thng A[i1,i2], A[i2,i3], . . .
A[ik-1,ik]. Cho trc hai nt i v j. Hy tm mt ng truyn tin t nt i n nt j sao cho
chi ph truyn thng l thp nht.
D liu vo c cho bi file TEXT c tn INP.NN. Trong , dng th nht ghi ba s
N, i, j, dng th k + 1 ghi k-1 s A[k,1], A[k,2], . . , A[k,k-1], 1<=k<=N.
Kt qu thng bo ra file TEXT c tn OUT.NN. Trong , dng th nht ghi chi ph
truyn thng thp nht t nt i n nt j, dng th 2 ghi ln lt cc nt trn ng
truyn tin c chi ph truyn thng thp nht t nt i ti nt j.
5. Cho mt mng thng tin gm N nt. Trong , ng truyn tin hai chiu trc tip t
nt i n nt j c chi ph truyn thng tng ng l mt s nguyn A[i,j] = A[j,i], vi
A[i,j]>=0, i j. Nu ng truyn tin t nt i1 n nt ik phi thng qua cc nt i2, . . ik-1
th chi ph truyn thng c tnh bng tng cc chi ph truyn thng A[i1,i2], A[i2,i3], . . .
A[ik-1,ik]. Bit rng, gia hai nt bt k ca mng thng tin u tn ti t nht mt ng
truyn tin.
tit kim ng truyn, ngi ta tm cch loi b i mt s ng truyn tin m vn
m bo c tnh lin thng ca mng. Hy tm mt phng n loi b i nhng ng
truyn tin, sao cho ta nhn c mt mng lin thng c chi ph ti thiu nht c th
c.
122
IT
8
2
PT
9
1
9
2
2
9
123
4
-4
-8
-2
-3
-4
3
2
-7
-3
PT
IT
124