You are on page 1of 160

C

Biên

www.hutech.edu.vn
*1.2021.COS120*
- :
tailieuhoctap@hutech.edu.vn
I

.................................................................................................................. I
.............................................................................................. V
....................................................................................................... VIII
BÀI 1: ......................................... 1
1.1 VAI TR C AC D L N TIN H C .......................... 1
................................................ 2
............................................................................... 3
....................................................................................... 3
.............................................................................. 4
PH C T P C A GI I THU T ......................................................................... 6
............................................................ 6
................................................................. 8
.................................................................................................................. 9
.................................................................................................... 10
BÀI 2: DANH SÁCH .................................................................................................... 11
2.1 KH I NI M ....................................................................................................... 11
2.2 C U TR C DANH S CH ..................................................................................... 11
PC T DANH S CH ............................................................... 14
2.4 HI N TH C DANH S CH K .............................................................................. 15
2.4.1 ................................................................ 15
2.4.2 Các t c v ......................................................................... 16
2.5 HI N TH C DANH S CH LIÊN K ........................................................... 21
................................................................... 21
......................................................... 21
2.5.3 ............................................................ 22
2.6 C C LO I DANH S CH LIÊN K T KH C ............................................................. 27
................................................................................ 27
.................................................................................. 28
................................................................................................................ 29
.................................................................................................... 29
BÀI 3: C VÀ QUEUE ........................................................................... 31
STACK ..................................................................................... 31
................................ ....................................................... 31
................................................................................................. 32
................................................................ ...................... 33
STACK ........................................................................................... 33
................................................................. 33
II
................................ .......................... 35
3.3 M T S B I TO N NG D NG STACK .............................................................. 36
................................ ................................... 36
........................................................... 39
3.3.3 Bài to ............................................................... 43
............................................................... 44
..................................................................................... 45
........................................................................................... 48
i ............................................................... 48
..................................................... 49
IC .................................................................................... 49
................................................................................................................ 51
.................................................................................................... 51
- .......................... 52
.............................................................................. 52
................................................................................................. 53
...................................................................................... 55
4.3.1 ............................................................................................... 55
................................................................................................ 55
...................................................................................... 57
........................................................... 59
4.4.1 ....................................................................... 59
4.4.2 ..................................................................................... 59
............................................................ 62
................................................................... 64
................................................................................................................ 68
.................................................................................................... 68
- AVL .................................................... 70
.......................................... 70
............................................................................................ 71
................................................................ ......... 72
...................................................................... 73
.......................................................................... 74
............................................................................................. 77
....................................................................... 77
................................................................................. 77
................................................................................................................ 80
.................................................................................................... 80
........................................................................ 81
6.1 ............................................................................................... 81
................................................................................................ ......... 81
III
............................................................................ 84
................................ ....................................................... 87
................................................................................... 89
........................................................................ 90
.................................................................................................. 90
................................ ............................................................... 92
........................................................................................... 92
.................................................................................................. 92
.......................................................................................... 94
................................................................................. 95
................................ ............................................................... 96
................................................................................................................ 97
.................................................................................................... 97
.............................................................................. 99
7.1 Chu trình Euler ................................................................................................. 99
.................................................................................................. 99
............................................................. 101
7.2 Chu trình Hamilton......................................................................................... 103
................................................................................................ 103
.................................................................. 104
..................................................................................................... 107
.............................................................................................................. 109
.................................................................................................. 109
.............................................................................................. 111
............................................................................... 111
................................................................... 111
...................................................................... 114
..................................................................................................... 115
................................................................................. 115
8.4.2 Bài toán tìm các thành p .......................................................... 118
.............................................................................................................. 121
.................................................................................................. 121
............................................. 124
.................................................................................................. 124
................................................................................................. 124
.............................................................................. 126
............................................................................... 128
.................................................................................. 129
........................................................................................................ 129
......................................................................................... 131
........................................................................................................ 131
IV
.............................................................................................................. 136
.................................................................................................. 136
.............................................................................. 138
............................................................... 138
............................................................................... 138
- FORD ..................................................................... 140
..................................................................................... 142
.............................................................................................................. 145
.................................................................................................. 145
.......................................................................................... 148
V

........................................... 7
.................................................. 14
.......................................................................... 15
Hình 2.3: Thêm n t 18 v o v tr 3 trong danh s ch ............................................ 18
Hình 2.4. X a n t 15 v tr 2 trong danh s ch .................................................. 19
Hình 2.5: Danh s ch liên k ..................................................................... 21

.................................. 23
Hình 2.7:
.................................. 23

............................................................ 24

.................................................... 24
Hình 2.10: Danh s ch liên k t v ng. ................................................................. 27
Hình 2.11: M t n t c a danh s ch liên k t k p. .................................................. 28
Hình 2.12: .................................................................... 28
Hình 3.1: Stack v thao t c push, pop trên n . .................................................. 32
Hình 3.2: Bà ..... 36
................ 37
................. 39
.................................................................................... 45
Hình 3.6: Minh hoa ...................................... 46
Hình 3.7: C t Queue b ng danh s ch liên k t ............................................... 49
Hình 4.1: y. ......................................................... 52
Hình 4.2: .................................................................................. 54
Hình 4.3: ........................................................................... 54
Hình 4.4: ....................................................................... 55
Hình 4.5: .......................................................................... 58
Hình 4.6: ..................................................................... 63
Hình 4.7: ............................................... 64
Hình 4.8: Xóa nút lá trên cây BST. ................................................................... 65
Hình 4.9: Xóa nút ................................................. 66
VI
Hình 4.10: Xóa nút có hai cây con trên cây BST. ................................................ 66
Hình 5.1: nút ........................................ 71
Hình 5.2: ................................................. 72
Hình 5.3: . .............................................. 72
Hình 5.4: . ............................................... 73
Hình 5.5: . ............................................. 74
Hình 5.6: ..................................................... 75
Hình 5.7: . ......................................................................... 76
Hình 5.8: Xoay kép. ....................................................................................... 76
................................................................... 82
................................................................... 82
Hình 6.3: ................................................................... 83
.................................. 84
................................... 84
....................................................................... 85

Goldner Harary ............................................................................................. 85


.................................................. 86
................................................................. 87
...................................................... 88
............................ 89
............................. 90

................ 91

........................................................................................... 92
.......................................... 93
..................................... 93
.......................................... 94
................. 94
................. 95

chu trình Euler ............................................................................................. 100


....................................................... 102
VII

................................................................................................. 104
......................... 106
........ 106
......................... 107
ình 7.6 ....................................... 108
.......................................... 108
........................ 113
.............. 119
.................................................................................. 124
.................................................................................. 125

........................................................................................................ 126

................................................................. 128
............................................................. 131
........................................................... 135
Hình 10.1: Ví d .................................................... 139

hình 10.1 .................................................................................................... 140


-Ford ........................................... 140

hình 10.3 .................................................................................................... 142


...................................................... 143
VIII

- -
IX
-

-
t

.
X

- 50%. Hình t

- m thi: 5
BÀI 1: 1

BÀI 1:

1.1 VAI TR C A C U TRÚC D LI U TRONG M T


N TIN H C
Th c hi n m án tin h c là chuy n bài toán th c t thành bài toán có th gi i
quy t trên máy tính. M t bài toán th c t b t k u bao g ng d li u
và các yêu c u x lý trên nh xây d ng m t mô hình tin
h c ph c bài toán th c t c n chú tr ng hai v :

- Xây d ng các thao tác x lý d li u: T nh ng yêu c u x lý th c t , c n tìm ra


các gi i thu nh trình t các thao tác máy tính ph i thi hành
cho ra k t qu mong mu c xây d ng gi i thu t cho bài toán.

Tuy nhiên, khi gi i quy t m ng có khuynh


ng ch chú tr n vi c xây d ng gi i thu m quan tr ng c a vi c
2 BÀI 1:

t ch c d li u trong bài toán. Gi i thu t ph n ánh các phép x ng x


lý c a gi i thu t l i là d li u, chính d li u ch ng các thông tin c n thi th c
hi n gi i thu c gi i thu t phù h p c n ph i bi n
lo i d li u nào và khi ch n l a c u trúc d li n ph i hi u rõ nh ng thao tác
nào s y trong m án tin h c, gi i thu t và c u trúc d
li u có m i quan h ch t ch v c th hi n qua công th c:

C u trúc d li u + Gi i thu

V i m t c u trúc d li n, s có nh ng gi i thu t ng, phù h p. Khi


c u trúc d li ng gi i thu tránh vi c x lý
ng ép, thi u t nhiên trên m t c u trúc không phù h a, m t c u trúc d
li u t t s giúp gi i thu t x phát huy tác d ng t ng
nhanh v a ti t ki m v i thu hi

1.2 CÁC TIÊU CHU U TRÚC D LI U

Tiêu

:
BÀI 1: 3
1.3 TR NG HOÁ D LI U

1.1

u v o:

u ra:

u v o:
u ra:

1.4 KI U D LI N
4 BÀI 1:

Ghi chú
char 1 byte -128 1-

unsigned 1 byte -
char
int 2 bytes -32, short int
32,767
unsigned int 2 bytes unsigned short int
int 4 bytes -2 32 31 -1 long int (x64)
long 4 bytes -2 32 31
-1
32
unsigned long 4 bytes -1
float 4 bytes 3.4E-
3.4E38 -

double 8 bytes 1.7E-


1.7E308

1.5 KI U D LI U CÓ C U TRÚC
BÀI 1: 5

1.2

- -

- -

int Diemthi;

char masv[15];

char tensv[15];

char noisinh[15];

typedef struct tagDate{

char ngay;

char thang;

char thang;

}Date;

typedef struct tagSinhVien{

char masv[15];

char tensv[15];

Date ngaysinh;

char noisinh[15];

int Diem thi;

}SinhVien;
6 BÀI 1:

1.6 C T P C A GI I THU T
1.6.1 Khái ni m v ph c t p c a gi i thu t

g trình:

t
BÀI 1: 7

N0

O(1) h
O(log n)
2

O(n) nh
O(nlog n) nh logarit
2
2 3
O(n ), O(n )
O(n!), O(n n)

Hình 1.1
8 BÀI 1:

1.6.2 ph c t p c a gi i thu t
Quy t c b h ng s : N i gian th c hi n là O(c.f(n)) v i
c là m t h ng s coi O(c.f(n)) = O(f(n)).

Quy t c l y max: N i gian th c hi n là T(n) = O(f(n) +


g(n)) thì có th coi T(n) = max(f(n), g(n)).

Quy t c c ng: N i gian th c hi n


i gian th c hi n là g(n), thì th th c hi n tu n t hai

Quy t c nhân: N i gian th c hi n


i gian th c hi n là g(n), thì th th c hi n
ng nhau là T(n) = O(f(n)×g(n)).
BÀI 1: 9

n n m:

: T ch c d li u chính là t
ch c bi u di n ng th c t c a bài toán. Vì v y, t ch c d li
quan tr ng trong vi c gi i quy t x lý bài toán, n k t qu c c a
án tin h c. T ch c d li u là công vi c
, phù
,t .

Phân bi c ki u d li n v ki u d li u c c u tr c
ed char, int, unsigned int, long, unsigned long, float, double,

liên C

Kh i ni m v c ch x n
10 BÀI 1:

Câu 1:

a.

b.

c.

Câu 2:

a.

b.

c.

Câu 3:

Câu 4:

Câu 5:
.
BÀI 2: DANH SÁCH 11

BÀI 2: DANH SÁCH

- Hi c c u tr c danh s ch.

- C i t danh s c p: c t danh s ch theo ki u k ti p v


ki u liên k t.

- Hi n th c danh s ch k v danh s ch liên k t, p d ng v o b i to n th c t .

2.1 KH I NI M

- danh s ch k

- d

2.2 C DANH S CH

- init

o ur n t.
12 BÀI 2: DANH SÁCH

isEmpty:

- isFull:

- ListSize:

ông.

- Retrieve:

position trong danh sách.

pos

0=<pos<=num - 1 (num

- Insert:

pos

pos

0=<pos<=num.

- Remove:

pos

pos út xóa).

0=<pos<=num 1
BÀI 2: DANH SÁCH 13

- Replace:

pos

pos.

0=<pos<=num-1

- ShowList:

- Sort:

- Search:

- Clearlist:

ông.
14 BÀI 2: DANH SÁCH

2.3 PC T DANH S CH

C t theo ki u k ti p:

hau

H ng là
.

Hình 2.1:

info next
pHead
NULL
BÀI 2: DANH SÁCH 15
pHead

next next next next

N t u N t cu i

Hình 2.2:

So s nh hai ki u c t:

i .

insert,
remove

remove, insert

2.4 HI N TH C DANH S CH K
2.4.1 Khai báo c u trúc c a danh sách k

- num
16 BÀI 2: DANH SÁCH

- T nodes

#define MAXLIST 100

typedef int DataType;

typedef struct list{

int num;

DataType nodes[MAXLIST];

}List;

- K

2.4.2 Các t c v trên danh sách k


-

void Init(List &plist){

plist.num=0;

- X ch:

int ListSize(List plist){


return plist.num;
}

int IsEmpty(List plist){


return (plist.num==0);
}
BÀI 2: DANH SÁCH 17
-

int IsFull(List plist){


return (plist.num==MAXLIST);
}

int Retrieve(List plist, int pos)


{
if(pos<0 || pos>=ListSize(plist))
{

return 0;
}
else
if(IsEmpty(plist))
{

return 0;
}
else
return plist.nodes[p os];
}

void Insert(List &plist, int pos, int x){

int i;

if(pos <0 || pos> ListSize(plist))

printf("\n Vi tri chen khong phu hop");

else{

if(IsFull(plist)){

printf("Danh Sach bi day");

return;

else{

for(i=ListSize(plist)-1; i>=pos; i--){


18 BÀI 2: DANH SÁCH

plist.nodes[i+1]=plist.nodes[i];

plist.nodes[pos]=x;

plist.num++;

c khi thêm:

30 24 15 28 12 22 17
0 1 2 3 4 5 6 7 8 9
Sau khi thêm n t 18 v o v tr 3:

30 24 15 18 28 12 22 17
0 1 2 3 4 5 6 7 8 9
Hình 2.3: Thêm n t 18 v o v tr 3 trong danh s ch
=>
F

int Remove(List &plist, int pos){

int x = -1;

if(pos <0 || pos>=ListSize(plist))

return x;

else{

if(IsEmpty(plist)) return x;

else{

x=plist.nodes[p os];

for(int i=pos;i<ListSize(plist)-1;i++){

plist.nodes[i]=plist.nodes[i+1];

plist.num--;

}
BÀI 2: DANH SÁCH 19
return x;

c khi x a:

30 24 15 28 12 22 17
0 1 2 3 4 5 6 7 8 9
Sau khi x a n t 15 t i v tr 2:

30 24 28 12 22 17
0 1 2 3 4 5 6 7 8 9
Hình 2.4. X a n t 15 v tr 2 trong danh s ch
-

void Replace(List &plist, int pos, int x){


if(pos<0 || pos>=ListSize(plist)){

printf("\n Vi tri hieu chinh khong dung");


return;
}else{

if(IsEmpty(plist)){
printf("\n Danh sach khong co phan tu");
return;

}else
plist.nodes[pos]=x;
}

- Duy t danh sách:

void ShowList(List plist){


int i;

if(IsEmpty(plist)){
printf("\n Danh sach khong co phan tu");
return;

}
for(i=0;i<plist.num;i++){
printf("\n%d", plist.nodes[i]);
}
}
20 BÀI 2: DANH SÁCH

Int Search(List plist, int x){

int vitri=0;

while(plist.nodes[vitri]!=x && vitri<plist.num)

vitri++;

if(vitri==plist.num)

return -1;

return vitri;

void SelectionSort(List &plist){

int i,j,vitrimin,min;

for(i=0;i<plist.num-1;i++){

min=plist.nodes[i];

vitrimin=i;

for(j=i+1;j<plist.num;j++){

if(min >plist.nodes[j]){

min=plist.nodes[j];

vitrimin=j;

plist.nodes[vitrimin]=plist.nodes[i];

plist.nodes[i]=min;

}
BÀI 2: DANH SÁCH 21
2.5 HI N TH C DANH S CH LIÊN K
2.5.1 Gi i thi u danh sách liên k

info - next

phead

pHead
next next next next

N t u N t cu i

Hình 2.5: Danh s ch liên k

- phead
phead=NULL

- phead

2.5.2 Khai báo c u trúc danh sách liên k


info next:

- info

- next
22 BÀI 2: DANH SÁCH

typedef struct node{


DataType info;
struct node* next;
}Node;
typedef Node* NODEPTR;

2.5.3 Các tác v trên danh sách liên k

(Minh h a v i info c a n t ki u int) Init, IsEmpty, InsertFirst, InsertAfter,


DeleteFirst, DeleteAfter, DeleteAll, ShowList, Search, Sort

- nit:

void Init(NODEPTR &phead){

phead = NULL;

int IsEmpty (NODEPTR phead) {

return (phead == NULL);

- -
t on tc d li u x.

NODEPTR CreateNode(DataType x){

NODEPTR p = new Node;

p->info = x;

p->next = NULL;

return p;

void InsertFirst(NODEPTR &phead, DataType x){

NODEPTR p = CreateNode(x);

p->next = phead;
BÀI 2: DANH SÁCH 23
phead = p;

(a) (b)
Hình 2.6:
ch.
-

void InsertAfter (NODEPTR p, DataType x){

NODEPTR tam;

if(p!=NULL){

q = createNode(x);

q->next = p->next;

p->next = q;

(a) (b)
Hình 2.7:

- T c v DeleteFirst: x a n u c a danh s ch liên k t.

void DeleteFirst(NODEPTR &pHead ){


NODEPTR p;
if (IsEmpty(p Head))

else {
24 BÀI 2: DANH SÁCH

p = pHead;
pHead = pHead ->next;
delete p;
}

(a) (b)
Hình 2.8

- T c v DeleteAfter: x a n t sau n t p trong danh s ch

void DeleteAfter(NODEPTR p){


NODEPTR q;
if (p==NULL || p->next ==NULL) //kiem tra nut sau p co ton tai ko

else {
q = p->next;
p->next = q->next;
delete q;
}
}

(a) (b)
Hình 2.9

- ClearList:
trên danh sách.

void ClearList(NODEPTR &phead){

NODEPTR p;
BÀI 2: DANH SÁCH 25
while (pHead!=NULL)
{
p = pHead;
pHead = p->next;
delete p;
}
}

- n th thông tin c c n t.

void ShowList(NODEPTR phead){


NODEPTR p = phead;
if(p == NULL)
\
while(p != NULL){
->info);
p = p->next;
}

NODEPTR Search(NODEPTR phead, DataType x){


NODEPTR p = phead;
while(p->info !=x && p!=NULL)
p = p->next;
return p;
}

- ng Selection Sort).

void Sort(NODEPTR &phead){


NODEPTR p,q,pmin;
int min;
for(p = phead;p->next != NULL;p = p->next){
min = p->info;
pmin = p;
for(q = p->next;q != NULL;q = q->next){
if(q->info < min){
26 BÀI 2: DANH SÁCH

min = q->info;
pmin = q;
}
}
pmin->info = p->info;
p->info = min;
}
}

M ts t cv kh c

- x v a ch c a
n t th i.

NODEPTR NodePointer(NODEPTR phead, int i){

NODEPTR p=phead;

int vitri=0;

while(p!=NULL && vitri<i){

p=p->next;

vitri++;

return p;

int Position(NODEPTR phead, NODEPTR p){


int vitri=0;
NODEPTR q=phead;
while(q!=NULL && q!=p){
q=q->next;
vitri++;
}
if(q==NULL)
return -1;
return vitri;
}

- Tác v

NODEPTR PreNode(NODEPTR phead, NODEPTR p){


NODEPTR q;
BÀI 2: DANH SÁCH 27
if(p==phead)
return NULL;
q=phead;
while(q!=NULL && q->next !=p )
q=q->next;
return q;
}

void Place(NODEPTR &phead, DataType x){


NODEPTR p,q;
q=NULL;
for(p=phead; p!=NULL && x>p->info; p=p->next){
q=p;
}
if(q==NULL)
InsertFirst(phead,x);
else
InsertAfter(q,x);
}

2.6 I DANH S CH LIÊN K T KH C


2.6.1 Danh sách liên k t vòng
next

Hình 2.10: Danh s ch liên k t v ng.

- plist

- plist
28 BÀI 2: DANH SÁCH

2.6.2 Danh sách liên k t kép

left
right).

Hình

Hình 2.11: M t n t c a danh s ch liên k t k p.

Hình 2.12:

right t
left right
left
BÀI 2: DANH SÁCH 29

n n m:

C u tr c d li u danh s ch l d y c c ph n t c c ng ki u d li u, v c t nh th
t . M i ph n t tn t

Hai c ch c t danh s ch:

C t theo ki u k ti p hi n th c danh s ch k (d ng m ng m t chi u)

C t theo ki u liên k t hi n th c danh s ch liên k

D ng m r ng c a danh s ch liên k t ch liên k t v ng, danh s ch liên


k t k p, danh s ch liên k t v ng k p.

Câu 1:

Câu 2: t c ct cv b sung trên danh s ch liên k t

a.

b.

c.

d. T

e.

f.

g.

h.

i.

Câu 3:
- -
-
30 BÀI 2: DANH SÁCH

a.
phím)

b.

c.

d. Tìm sinh viên có tên là X

Câu 4: Vi nh hi n th c danh s ch liên k

Câu 5: V

Câu 6:

cùng. Các thao tác trên danh sách:

Init, IsEmpty, CreateNode, InsertFrist, InsertLast, InsertPrev, InsertNext,


InsertPos, DeleteFirst, DeleteLast, DeleteNext, DeletePrev, DeletePos, ShowList,
ShowInvert, Search, Sort. ClearList.
BÀI 3: 31

BÀI 3: C VÀ QUEUE

- Hi c c u tr c Stack và Queue.

3.1 GI I THI U V STACK


3.1.1 Khái ni m v Stack

Stack
Stack. Trên Stack các
Stack ho
v c - LIFO (Last In First Out).

Hai thao tác chính trên Stack:

- T push Stack

- T pop Stack.

Stack

- push(s, A): hình a.

- push(s, B): hình b.

- pop(s): hình c.

- push(s, C): hình d.


32 BÀI 3:

Hình 3.1: Stack v thao t c push, pop trên n .

3.1.2 Mô t Stack

Stack
Stack Stack.

- Init

Stack

Stack Stack.

- IsEmpty

Stack

- Push

Stack.
BÀI 3: 33
- Pop

Stack.

Stack

3.1.3 ng d ng c a Stack
- Stack

- Stack

- Stack

3.2 HI N TH C STACK
3.2.1 Hi n th c Stack b ng danh sách k
Stack:

- Stack.

- Stack.

#define MAXSTACK 100


struct stack{
int top;
int nodes[MAXS TACK];
};
34 BÀI 3: TRÚC STACK VÀ QU EUE

typedef struct stack Stack;

C ct cv trên Stack

void Init(Stack &s){

s.top = -1;

int IsEmpty(Stack s){

return (s.top==-1);

int IsFull(Stack s){

return (s.top == MAXSTACK-1);

void Push(Stack &s, int x){


if(IsFull(s)) return 0;
else{
s.nodes[++s.top]=x;
return 1;
}
}
-

int Pop(Stack &s){


if(IsEmpty(s)) return 0;
else{
x = s.nodes[s.top--];
return 1;
}
}
BÀI 3: 35
3.2.2 Hi n th c stack b ng danh sách liên k t

typedef struct node

DataType info;

struct node * next;

}Node;

typedef Node* NODEPTR;

typedef NODEPTR STA Ck;

STACK s;

C c t c v trên Stack:

void Init(STACK &s){

s=NULL;

int IsEmpty(STACK s) {

return (s==NULL);

int Push(STACK &s, DataType x){

NODEPTR p = new Node;

if(p==NULL) return 0;

p->info = x;

p->next = s;

s = p;

return 1;

- Tác

int Pop(STACK &s, DataType &x)


36 BÀI 3:

{
if (isEmpty(s)) return 0;
NODEPTR p=s;
x=p->info;
s=s->next;
delete p;
return 1;
}

3.3 B I TO N NG D NG STACK
-

- Áp d ng cho bài toán dùng LIFO:

3.3.1 Bài toán tháp Hà N i: Kh quy


n ch

(a) (b)
Hình 3.2:

-
BÀI 3: 37
void DiChuyen(int n , char a, char b, char c )

{
if (n==1)
{

printf("Di chuyen 1 dia tu %c sang %c\n", a, c);


return;

}
DiChuyen (n-1, a, c, b);

DiChuyen (1, a, b, c);


DiChuyen (n-1, b, a, c);
}

Hình 3.3:

struct item_tower
{
int num;
char A, B, C;
void assign(int n, char a, char b, char c)
38 BÀI 3:

{
num = n;
A = a;
B = b;
C = c;
}
};
void DiChuyen_KhuDeQuy(int n, char a, char b, char c)
{
stack s;
item t;
int d = 0;
t.assign(n, a, b, c);

init(s);
push(t, s);

while(isEmpty(s) == false)
{
item temp = top(s);
pop(s);
if (temp.num == 1)
printf("Di chuyen 1 dia tu %c sang %c\n ", temp.A, temp.C);
else
{
t.assign(temp.num-1, temp.B, temp.A, temp.C);
push(t, s);

t.assign(1, temp.A, temp.B, temp.C);


push(t, s);

t.assign(temp.num-1, temp.A, temp.C, temp.B);


push(t, s);
}
}
}
Hình
BÀI 3: 39

Hình 3.4:

3.3.2 Bài toán chuy n i d ng c a bi u th c

hay ký pháp Ba Lan).

các
các , (4)
.

, (2)
, (3) Phép toán
.
40 BÀI 3:

, (2)
, (3)

A×B+ C/D +×A B/CD A B×CD/+


A × (B + C) / D /×A+ BCD A BC+×D/
A × (B + C / D) ×A +B/CD A BCD/+×

1.

Stack s

2.

3.

4.

5.

6.

toán
BÀI 3: 41

7. -

8.

3.1

stack s = NULL

i exp[i] output s
0 A A NULL
1 * A *
2 ( A (*
3 B AB (*
4 + AB +(*
5 C ABC +(*
6 ) ABC+ *

ABC+*

3.2

stack s = NULL

i exp[i] output s
0 A A NULL
1 * A *
2 B AB *
3 ^ AB ^*
4 C ABC ^*
5 + ABC^* +
6 D ABC^*D +

ABC^*D+
42 BÀI 3:

1.

2. Tha

3.

- Stack s

toán

ào stack s.

4.

5.

3.3
BÀI 3: 43

i exp[i] output S
0 ( [] (
1 C C (
2 + C +(
3 B CB +(
4 ) CB+
5 * CB+ *
6 A CB+A *

*A+BC

3.4

ev = D/C+B*A

i exp[i] output S
0 D D NULL
1 / D /
2 C DC /
3 + DC/ +
4 B DC/B +
5 * DC/B *+
6 A DC/BA *+

= +*AB/CD

3.3.3 Bài toán tính giá tr bi u th c h u t

1.

2.
44 BÀI 3:

3.

4. b) ra

toán vào stack s.

5.

6. c sau

3.5 -

i exp[i] a b S
0 2 - - - 2
1 5 - - - 5 2
2 7 - - - 7 5 2
3 8 - - - 8 7 5 2
4 * 8 7 7 * 8 = 56 56 5 2
5 + 56 5 5 + 56 = 61 61 2
6 * 61 2 2 * 61 = 122 122
7 9 - - - 9 122
8 - 9 122 122 9 113

- là 113.

3.3.4 Bài toán tính giá tr bi u th c ti n t

1.

2.

3.

4.

vào stack s.
BÀI 3: 45
5.

6.

3.6 -*2+5*789

i exp[i] a b S
a và b
8 9 - - - 9
7 8 - - - 8 9
6 7 - - - 7 8 9
5 * 7 8 7 * 8 = 56 56 9
4 5 - - - 5 56 9
3 + 5 56 5 + 56 = 61 61 9
2 2 - - - 2 61 9
1 * 2 61 2 * 61 122 9
0 - 122 9 122 9 = 113 113

-*2+5*789 là 113.

3.4 GI I THI U V QUEUE


Queue (h d
thêm vào và

(First In First Out).

Hình 3.5:
46 BÀI 3:

Kh i ni m v Queue

- insert

- remove

Hìn

(hình a)

insert (q, A)

insert (q, B)

insert (q, C) (hình b)

remove(q) (hình c)

insert (q, D) (hình d)

remove(q) (hình e)

insert (q, E) (hình f)

Hình 3.6:
BÀI 3: 47
:

- Init

- IsEmpty

- Tá Insert

- Remove

thông tin n .
48 BÀI 3:

3.5 HI N TH C QUEUE
3.5.1 Dùng m ng vòng hi n th i

-1].

#define MAXQUEUE 100


typedef int DataType;
struct queue{
int front, rear;
DataType node[MAXQUEUE];
} Queue;

void Init(Queue &q){


q.front=q.rear= -1;
}

int IsEmpty(Queue &pq){


return (q.front== -1);
}

int IsFull(Queue &pq){


return ((q.rear - q.front+1) % MAXQUEUE == 0 );
}

int enQueue (Queue &q, DataType x){


if(isFull(q)) return 0; // Full Queue
else
{ if(isEmpty(q)) q.front = 0;
q.rear = (q.rear+1) % MAXQUEUE;
q.node[q.rear] = x;
return 1;
}
}
BÀI 3: 49
-

int deQueue(Queue &q, DataType &x)


{
if(isEmpty(q)) return 0; // Empty Queue
else
{ x = q.node[q.front];
if(q.front == q.rear) init(q);
else q.front = (q.front+1) % MAXQUEUE;
return 1;
}
}

3.5.2 Dùng danh sách liên k t hi n th i

front rear

Hình 3.7: C t Queue b ng danh s ch liên k t


Insert,
R

3.6 IC N
50 BÀI 3:

-
BÀI 3: 51

c n n m:

sau). IFO.

Các thao tác trên Stack: Init, IsEmpty, Push, Pop.

t h
server, c
.

Câu 1: Stack Stack

Câu 2: Stack.

Câu 3:

Câu 4:

Câu 5:

Câu 6:
52 BÀI 4: - CÂY N

BÀI 4: -
PHÂN

- Hi u c c u tr c

4.1 C U TRÚC CÂY T NG QUÁT


Cây

Hình 4.1:
BÀI 4: - 53
là nút không có nút cha,

Nút lá (leaf)

Nút trung gian hay nút trong (internal node)

Nút anh em (brothers): úng

gree of node)

- 1.

cây + 1

4.2 CÂY NH PHÂN

- Hai
54 BÀI 4: -

Hình 4.2:

M t
t 2n - 1 nút.

Hình 4.3:

-
BÀI 4: - 55

Hình 4.4:

4.3 MÔ T CÂY NH PHÂN


4.3.1 Mô t d li u

4.3.2 Mô t tác v
- Init

- IsEmpty
56 BÀI 4: - CÂY NH

- CreateNode

- InsertLeft

- InsertRight

- DeleteLeft

- DeleteR ight
BÀI 4: - 57
- PreOrder

: không.

: Không.

- InOrder

: Không.

- PostOder

: Không.

: Không.

- Search

- ClearTree

: Không.

4.3.3 Duy t cây nh phân

Duy t cây theo chi u r ng l c ch duy t cây theo m t m sâu


nh t n c khi duy t t i m c ti p
u tiên duy t nút g c (m c 0)
58 BÀI 4: -

ó ba cách :

- PreOder - Node Left Right Node


Right Left , sau
(trái).

- InOder Right Node


Left
(trái).

- PostOder RLN Right Left


Node
(trái)

Hình 4.5:

N .

N trên .
BÀI 4: - 59
4.4 HI N TH C CÂY NH PHÂN T NG QUÁT
4.4.1 Khai báo c u trúc c a m t nút

typedef int DataType;

typedef struct nodetype{

DataType info;

struct nodetype *left;

struct nodetype *right;

}Node ;

typedef Node *NODEPTR;

4.4.2 Hi n th c các tác v

info

- CreateNode: .
NODEPTR CreateNode(DataType x){
NODEPTR p=new Node;
p->info=x;
p->left=NULL;
p->right=NULL;
return p;
}
- PreOrder
void PreOder(NODEPTR proot){
if(proot !=NULL){
printf("%4d",proot->info);
PreOder (proot->left)
PreOder (proot->right);
}
}
60 BÀI 4: -

- InOder

void InOder (NODEPTR proot){


if(proot!=NULL){
InOder (proot->left) ;
printf("%4d",proot->info);
InOder (proot->right);
}
}

- PostOder

void PostOder (NODEPTR proot){


if(proot!=NULL){
PostOder (proot->left) ;
PostOder (proot->right);
->info);
}
}

PreOrder, InOrder, PostOrder, thao


printf("%4d",proot->info)

- Search

NODEPTR Search(NODEPTR proot, DataType x){


NODEPTR p;
if(proot->info==x) return proot;
if(proot==NULL) return NULL;
p=Search(proot->left, x);
if(p==NULL)
p=Search(proot->right, x);
return p;
}

- ClearTree

void ClearTree(NODEPTR &proot) {

if(proot!=NULL){

ClearTree(proot->left) ;

ClearTree(proot->right);

delete proot;

}
BÀI 4: - 61
- InsertLeft
void InsertLeft (NODEPTR p, DataType x){
if(p==NULL)
printf("\n Nut khong ton tai");
else
if(p->left !=NULL)
printf("\n Nut p da co con ben trai");
else
p->left= CreateNode(x);
}
- InsertRight
void InsertRight(NODEPTR p , DataType x){
if(p==NULL)
printf("\n Nut khong ton tai");
else
if(p->right!=NULL)
printf("\n Nut da co con ben phai");
else
p->right=CreateNode(x);
}
- DeleteLeft
int DeleteLeft(NODEPTR p){
NODEPTR q;
int x;
if(p==NULL){
printf("\n Nut khong ton tai");
}
else{
q=p->left;
x=q->info;
if(q==NULL)
printf("\n Nut khong co con ben trai");
else{
if(q->left!=NULL ||q->right !=NULL)
printf("\n Nut khong phai la la");
else{
p->left=NULL;
delete q;
}
}
}
return x;
}
62 BÀI 4: -

- DeleteRight
int DeleteRight(NODEPTR p){
NODEPTR q;
int x;
if(p==NULL){
printf("\n Nut khong ton tai");
}
else{
q=p->right;
x=q->info;
if(q==NULL)
printf("\n Nut khong co con ben phai");
else{
if(q->left!=NULL ||q->right !=NULL)
printf("\n Nut khong phai la la");
else{
p->right=NULL;
delete q;
}
}
}
return x;
}

4.5 PHÂN TÌM KI M


Binary Search Tree, BST

-
c.

- C
BÀI 4: - 63

Hình 4.6:

Trong

- :

- :

-
64 BÀI 4: -

4.6 T CÂY NH PHÂN TÌM KI M

NODEPTR search(NODEPTR proot, DataType x){

NODEPTR p;

p=proot;

if(p!=NULL)

if(x<proot->info) p=search(proot->left, x);

else

if(x>proot->info) p=search(proot->right, x);

return p;

Hình 4.7:
BÀI 4: - 65
void Insert(NODEPTR &proot, DataType x) {

if (isEmpty(proot)

proot = CreateNode(x);

else

if (x==proot->info)
return;

if (x<proot->info)

Insert(proot->left, x);

else

Insert(proot->right, x);

ó chúng ta

Hình 4.8: Xóa nút lá trên cây BST.

i.
66 BÀI 4: -

Hình 4.9:

Hình 4.10: Xóa nút có hai cây con trên cây BST.

int Remove(NODEPTR &proot, DataType x) {

if ( proot == NULL)

return FALSE;

if (proot->info >x) //tìm và xóa bên trái

return Remove(proot->left, x);

if (proot->info <x)

return Remove(proot->right, x);

->info==x)

Node* p, f, rp;
BÀI 4: - 67
p = proot;

if ( proot->left == NULL) //có 1 cây con

proot = proot->right;

else if (p root->right == NULL) //có 1 cây con


proot = proot->left;

else {

f = p;

rp = p->right; ->right

while ( rp->left != NULL) {

f = rp;

rp = rp->left; //rp qua bên trái

p->info = rp->info;

if ( f == p)

f->right = rp->right;

else //f != p

f->left = rp->right;

p = rp;

delete p; //xoá nút p

return TRUE;
68 BÀI 4: -

n n m:

Cây n

DeleteRight, PreOder, InOder, PostOder, Search, ClearTree.

con trái , và g
.

Câu 1:

a.

b.

c.

d.

e.

f.

g.
BÀI 4: - 69
h.

i. không?

j.

k.

l.

Câu 2:

a.
5, 2, 20, 11, 30, 9, 18, 4.

b.

Câu 3:

a.

b.

c.

d.

e.

f.

g.

h.

i.

j. .
70 BÀI 5: - AVL

BÀI 5:
- AVL

Sau khi h

- Hi u c c u tr g.

5.1 PHÂN TÌM KI M CÂN B NG

là Adelson Velski và L

-
BÀI 5: - AVL 71
-

- lh(p)=rh(p)

- bf(p)=0: lh(p)=rh(p)

- bf(p)=1: lh(p)=rh(p) + 1

- bf(p)=-1: lh(p)=rh(p) 1

Hình 5.1:

5.2 CÁC TÁC V XOAY


72 BÀI 5: - AVL

5.2.1 Tác v xoay trái (RotateLeft)

Hình 5.2:

Hình 5.3: .
BÀI 5: - AVL 73
NODEPTR RotateLeft(NODEPTR proot){

NODEPTR p;

p=proot;

if(proot==NULL){

printf("\n Khong the xoay trai vi cay rong");

}else{

if(proot->right==NULL)

printf("\n Khong the xoay trai vi khong co node con ben phai");

else{

p=proot->right;

proot ->right=p->left;

p->left=proot;

return p;

5.2.2 Tác v xoay ph i (RotateRight)

Hình 5.4: .
74 BÀI 5: - AVL

Hình 5.5: .

NODEPTR RotateRight(NODEPTR proot){


NODEPTR p;
p=proot;
if(proot==NULL)
printf("\n Khong the xoay phai vi cay bi rong");
else
if(proot->left==NULL)
printf("\n Khong the xoay phai vi khong co con ben trai");
else{
p=proot->left;
proot ->left=p->right;
p->right=proot;
}
return p;
}

5.3 THÊM M T NÚT VÀO CÂY AVL

-
BÀI 5: - AVL 75
-

thêm nút x vào cây AVL, v

bf(ya)=1, nút lá thêm vào cây là nút sau bên trái ya.

bf(ya)=-

Hình 5.6:
76 BÀI 5: - AVL

Khi thêm nút x vào nhánh câ

Hình 5.7: .

Hình 5.8: Xoay kép.


BÀI 5: - AVL 77
5.4 T CÂY AVL
5.4.1 Khai báo c u trúc cho cây AVL

struct nodetype{

DataType info;

int bf; //balance factor

struct nodetype *left, *right;

};

typedef struct nodetype *NODEPTR;

5.4.2 Các tác v c a cây AVL

void Insert(NODEPTR *pavltree, DataType x)


{
//fp la nut cha cua p, q la con cua p
//ya la nut truoc gan nhat co the mat can bang, fya la cha cua ya
//s la nut con cua ya theo huong mat can bang
//imbal=1: lech trai; =-1 lech phai
NODEPTR fp, p, q, fya, ya, s;
int imbal;
//khoi dong cac gia tri
fp=NULL;
p=*pavltree;
fya=NULL;
ya=p;
while(p!=NULL){
if(x==p->info) return;
if(x<p->info) q=p->left;
if(x>p->info) q=p->right;
if(q!=NULL)
if(q->bf!=0){ //neu bi mat can bang
fya=p;
78 BÀI 5: - AVL

ya=q;
}
fp=p;
p=q;
}
q=makenode(x);
//them vao mot node la con cua fp
if(x<fp->info) fp->left=q;
else fp->right=q;
//hieu chinh lai chi so can bang cua tat ca cac node giua ya va q
if(x<ya->info) p=ya->left;
else p=ya->right;

s=p;
while(p!=q){
if(x<p->info){
p->bf=1;
p=p->left;
}else{
p->bf=-1;
p=p->right;
}
}

//xac dinh huong lech


if(x<ya->info) imbal=1;
else imbal=-1;

if(ya ->bf==0){
ya->bf=imbal;
return;
}
if(ya ->bf !=imbal){
ya->bf=0;
return;
}

if(s->bf==imbal){
if(imbal==1){
p=RotateRight(ya);
}else{
p=RotateLeft(ya);
}
BÀI 5: - AVL 79
ya->bf=0;
s->bf=0;
}else{
if(imbal==1){
ya->left=RotateLeft(s);
p=RotateRight(ya);
}else{
ya->right=RotateRight(s);
p=RotateLeft(ya);
}
if(p->bf==0){
ya->bf=0;
s->bf=0;
}else
if(p->bf==imbal){
ya->bf=-imbal;
s->bf=0;
}else{
ya->bf=0;
s->bf=imbal;
}
p->bf=0;
}
if(fya==NULL) *pavltree=p;
else
if(ya==fya->right) fya->right=p;
else fya->left=p;
}
80 BÀI 5: - AVL

Trong bài này, h n n m:

Câu 1: AVL.

a.
5, 2, 20, 11, 30, 9, 18, 4.

b.

Câu 2:

a. e

b.
BÀI 6: 81

BÀI 6:

6.1 CÁC KHÁI NI M


6.1.1 th

V2
(u, v

tr nh (u, v)

E), (D, E), (D, D)}.


82 BÀI 6:

Hình 6.1:

, (D, B), (C, D)}.

Hình 6.2:

Khuyên
BÀI 6: 83

A, E)

E), (A, E) và (D, E), (B, E) và (C, E), (B, E) và (D, E), (C, E) và (D, E).

D), (B, D) và (C, D).

D.

Hình 6.3:
84 BÀI 6:

6.1.2 M t s d th c bi t

Hình
6.5.

(a) (b)

Hình 6.4:

(a) (b)

Hình 6.5:
BÀI 6: 85

Hình 6.6:

(a)

(b)
Hình 6.7:
Harary
86 BÀI 6:

A = (V A, EA G, EG
VA G và các cung trong E A là các /cung
A.

1 = (V G, E1 G, EG
E1 G.

G G = {(A, B), (A, C), (A, E), (B, D), (B, E), (C,
1 G1 p
G1 = {(A, B), (A, C), (B, D), (C, D)}. Do V G1 VG

G2 G2

= {(A, B), (A, C), (B, D), (B, E), (C, D)}. Do V G = V G2 và E G2 EG

(a) (b) (c)

Hình 6.8:
BÀI 6: 87

(A, B) 1
(A, D) 7
(A, E) 5
(B, C) 12
(B, D) 3
(C, D) 9
(D, E) 1

Hình 6.9:

6.1.3 B c c th

o.

-
88 BÀI 6:

+
:

-
(v) + d+(v).

A B C D E F
0 2 1 2 0 1
2 1 2 1 0 0
2 3 3 3 0 1

Hình 6.10:

1.

2.

3.

4.
1.

5.
BÀI 6: 89
6.

6.1.4

: dãy v0 , v1 n (vi 0

vn i và vi+1 i, v i+1) 0

0, v1 n.

: là

Chu trình

Hình 6.11:
90 BÀI 6:

, C, A}.

Hình 6.12:

1.

2.

6.2 TÍNH LIÊN THÔNG C TH


6.2.1

n thông.
BÀI 6: 91

(a) (b)

(c) (d)

Hình 6.13:
92 BÀI 6:

Hình 6.14:

6.2.2 Các tính ch t

1.

2.

3.

4.

5. -1)(n-

6.3 BI U DI TH

danh sách c nh, và danh sách k .

6.3.1 Ma tr n k

th ng G = (V, E) v i t nh V = {v 1, v2 n} và t p c nh E =
{e 1, e2 m}. Ma tr n k c th G là ma tr n vuông A c p v i các ph n t
BÀI 6: 93
ij

i và vj.

1. Ma tr

2.

3.

6.1

Hình 6.15:

6.2

Hình 6.16:
94 BÀI 6:

6.3

Hình 6.17:

6.3.2 Ma tr n tr ng s

1, v2 n

1, e2 m i, vj ij nk ,
ma tr n tr ng s c th G là ma tr n vuông c p v i các ph n t c xác
nh b ng tr ng s c a m i c

6.4

Hình 6.18:
BÀI 6: 95
6.5

Hình 6.19:

6.3.3 Danh sách c nh (cung)

i.

6.6 trong hình 6.17 là:

1 1
1 2
1 4
2 3
4 2
4 3
96 BÀI 6:

6.7

1 2 5
1 4 7
2 3 3
4 2 9
4 3 12

6.3.4 Danh sách k

V: (u, v) E).

6.8

L(1) = {2, 4}

L(2) = {1, 3, 4}

L(3) = {2, 4}

L(4) = {1, 2, 3}

6.9

L(1) = {1, 2, 4}

L(2) = {3}

L(3) =

L(4) = {2, 3}
BÀI 6: 97

n n m:

Câu 1:
98 BÀI 6:

Câu 2:

Câu 3:

Câu 4:

Câu 5:
và câu 4.

Câu 6:

Câu 7:

Câu 8:
BÀI 7: 99

BÀI 7:

- Hi c chu trình Euler.

7.1 CHU TRÌNH EULER


7.1.1

1, v2 n }, E = {e1 , e2 m}

Chu trình Euler


100 BÀI 7:

- ng

ler A, D, E, C, D, F, A,

(a) (b) (c)

Hình 7.1
(

2.
BÀI 7: 101

7.1.2 Gi i thu t tìm chu trình/ ng Euler

Fleury sau:

1.

2.

3.

a.

b.

chu trình/ .

Function Euler_Path
{

Thêm u vào S
102 BÀI 7:

) do
{

Thêm w vào S

else
{

Thêm v vào CE

}
}
}

7.1

Hình 7.2:

1.

2.
BÀI 7: RÌNH 103
3.

Euler

4.

5.

6.

7.

7.2 CHU TRÌNH HAMILTON


7.2.1

Chu trình Hamilton:

hu trình Hamilton.
104 BÀI 7:

(a) (b) (c)

Hình 7.3

7.2.2 Gi i thu t tìm chu trình Hamilton

0, v1,
n
BÀI 7: 105
1. 0 0

2. Thêm 1

tìm: H = {v0 0

Function Hamilton(k)
{
-1] do
{
if (k = n + 1 and u = v0) then write(
else
{
if (visited[u] == false) then
{
H[k] = u
visited[u] = true
Hamilton(k + 1)
visited[u] = false
}
}
}
}

// main program
Function main
{
for v V do visited[v] = false
H[1] = v0
visited[v0] = true
Hamilton(2)
106 BÀI 7:

7.2

Hình 7.4:

Hình 7.5: C
BÀI 7: 107

7.3 NG D NG
: t

Hình 7.6:
108 BÀI 7:

Hình 7.7:

Hình 7.8:
BÀI 7: 109

Trong bài này, n n m:

Câu 1:

a. b.

c. d.

Câu 2:
110 BÀI 7:

Câu 3:

Câu 4:

Câu 5:

Câu 6:
BÀI 8: 111

BÀI 8:

- Hi u

8.1 BÀI TOÁN DUY TH

Search).

{v 0}.

8.2 DUY T THEO CHI U R NG (BFS)


112 BÀI 8:

Function BFS(v)

{
phát v
for u V do
visited[u] = false
visited[v] = true
)
{

visited[z] = true
}
}
}
}

Function main
{
for v V do visited[v] = false
for v V do
if (visited[v] == false) then BFS(v)
}
BÀI 8: 113
8.1

Hình 8.1:

= true, 0 = false).

1 {2, 3, 4} {2, 3, 4} {1, 1, 1, 1, 0, 0, 0, 0, 0}


2 {1, 7, 8} {3, 4, 7, 8} {1, 1, 1, 1, 0, 0, 1, 1, 0}
3 {1, 4, 5, 6} {4, 7, 8, 5, 6} {1, 1, 1, 1, 1, 1, 1, 1, 0}
4 {1, 3, 6} {7, 8, 5, 6} {1, 1, 1, 1, 1, 1, 1, 1, 0}
7 {2, 5, 8} {8, 5, 6} {1, 1, 1, 1, 1, 1, 1, 1, 0}
8 {2, 7} {5, 6} {1, 1, 1, 1, 1, 1, 1, 1, 0}
5 {3, 9} {6, 9} {1, 1, 1, 1, 1, 1, 1, 1, 1}
6 {3, 4, 9} {9} {1, 1, 1, 1, 1, 1, 1, 1, 1}
9 {5, 6} {1, 1, 1, 1, 1, 1, 1, 1, 1}
114 BÀI 8:

8.3 DUY T THEO CHI U SÂU (DFS)

Function DFS(v)
{

visited[v] = true
for u V do
visited[u] = false
)
{

visited[z] = true
}
}
}
}
theo cách sau:

Function main()

{
for v V do visited[v] = false
for v V do
if (visited[v] == false) then DFS(v)
}
BÀI 8: 115
8.2

= true, 0 = false).

1 {2, 3, 4} {2, 3, 4} {1, 1, 1, 1, 0, 0, 0, 0, 0}


2 {1, 7, 8} {7, 8, 3, 4} {1, 1, 1, 1, 0, 0, 1, 1, 0}
7 {2, 5, 8} {5, 8, 3, 4} {1, 1, 1, 1, 1, 0, 1, 1, 0}
5 {3, 7, 9} {9, 8, 3, 4} {1, 1, 1, 1, 1, 0, 1, 1, 1}
9 {5, 6} {6, 8, 3, 4} {1, 1, 1, 1, 1, 1, 1, 1, 1}
6 {3, 4, 9} {8, 3, 4} {1, 1, 1, 1, 1, 1, 1, 1, 1}
8 {2, 7} {3, 4} {1, 1, 1, 1, 1, 1, 1, 1, 1}
3 {1, 4, 5, 6} {4} {1, 1, 1, 1, 1, 1, 1, 1, 1}
4 {1, 3, 6} {1, 1, 1, 1, 1, 1, 1, 1, 1}

, 9, 6, 8, 3, 4.

8.4 NG D NG
8.4.1

Function BFS(s, g)
{

for u V do
{
116 BÀI 8:

visited[u] = false
parent[u] = -1
}
visited[s] = true
)
{

if (u == g) then

visited[z] = true
parent[z] = u
}
}
}
if L =
}
Function DFS(s, g)
{

for u V do
{
visited[u] = false
parent[u] = -1
}
visited[s] = true
)
{

if (u == g) then

for
{
BÀI 8: 117

visited[z] = true
parent[z] = u
}
}
}
}
v1 = parent[g] v2 =
parent[v1] v3 = parent[v2]

8.3

hình 8.1.

-1, -1, -1, -1, -1, -1, -1, -1, -1}.

Danh sách

1 {2, 3, 4} {2, 3, 4} {1, 1, 1, 1, 0, 0, 0, {-1, 1, 1, 1, 0, 0, 0,


0, 0} 0, 0}
2 {1, 7, 8} {3, 4, 7, 8} {1, 1, 1, 1, 0, 0, 1, {-1, 1, 1, 1, 0, 0, 2,
1, 0} 2, 0}
3 {1, 4, 5, 6} {4, 7, 8, 5, 6} {1, 1, 1, 1, 1, 1, 1, {-1, 1, 1, 1, 3, 3, 2,
1, 0} 2, 0}
4 {1, 3, 6} {7, 8, 5, 6} {1, 1, 1, 1, 1, 1, 1, {-1, 1, 1, 1, 3, 3, 2,
1, 0} 2, 0}
7 {2, 5, 8} {8, 5, 6} {1, 1, 1, 1, 1, 1, 1, {-1, 1, 1, 1, 3, 3, 2,
1, 0} 2, 0}

sau: 1, 2, 7.
118 BÀI 8:

8.4

hình 8.1.

-1, -1, -1, -1, -1, -1, -1, -1, -1}.

Danh sách

1 {2, 3, 4} {2, 3, 4} {1, 1, 1, 1, 0, 0, 0, {-1, 1, 1, 1, 0, 0, 0,


0, 0} 0, 0}
2 {1, 7, 8} {7, 8, 3, 4} {1, 1, 1, 1, 0, 0, 1, {-1, 1, 1, 1, 0, 0, 2,
1, 0} 2, 0}
7 {2, 5, 8} {5, 8, 3, 4} {1, 1, 1, 1, 1, 0, 1, {-1, 1, 1, 1, 7, 0, 2,
1, 0} 2, 0}

sau: 1, 2, 7.

8.4.2 Bài toán tìm các thành ph n liên thông

Function BFS(v, inconnect)


{

visited[v] = inconnect
v
)
{

{
if (visited[z] == 0)
{
BÀI 8: 119
visited[z] = inconnect
//parent[z] = u
}
}
}
}

Function Find_connected
{
for v V do visited[v] = 0
count = 0
for v V do
{
if (visited[v] == 0) then
{
count = count + 1
BFS(v, count)
}
}
}
8.5

Hình 8.2:

1. Xét v = 1
visited[1] = 1.
120 BÀI 8:

Danh sách

1 {3, 4} {3, 4} {1, 0, 1, 1, 0, 0, 0, 0, 0}


3 {1, 4, 5, 6} {4, 5, 6} {1, 0, 1, 1, 1, 1, 0, 0, 0}
4 {1, 3, 6} {5, 6} {1, 0, 1, 1, 1, 1, 0, 0, 0}
5 {3} {6} {1, 0, 1, 1, 1, 1, 0, 0, 0}
6 {3, 4} {1, 0, 1, 1, 1, 1, 0, 0, 0}

2. Xét v = 2
visited[2] = 2.

Danh sách

2 {7, 8} {7, 8} {1, 2, 1, 1, 1, 1, 2, 2, 0}


7 {2, 8} {8} {1, 2, 1, 1, 1, 1, 2, 2, 0}
8 {2, 7} {1, 2, 1, 1, 1, 1, 2, 2, 0}

3. Xét v = 9
visited[9] = 3.

Danh sách

9 {1, 2, 1, 1, 1, 1, 2, 2, 3}

{9}.
BÀI 8: 121

n n m:

(depth first search).

Câu 1:

b.
a.

c. d.
122 BÀI 8:

e.

Câu 2:

Câu 3:

a.

b.
BÀI 8: 123
Câu 4:

Câu 5:

Câu 6:

Câu 7:

Câu 8:
124 BÀI 9:

BÀI 9: CÂY BAO TRÙM VÀ CÂY

- Hi u

9.1
9.1.1 Cây và b i

T, ET T T

a trong hình 9.1.

Hình 9.1:
BÀI 9: 125
G, EG VG

1.

2.

3.

Hình 9.2:

1. T là cây.

2. Cây T không có chu trình và có n

3. Cây T liên thông và có n

4.
liên thông.

5.

6.
126 BÀI 9:

9.1.2 Cây bao trùm c th


Khái

(a) (b)

(c) (d)

Hình 9.3:

1.

n-2
2. .

3.

4.

5. -
BÀI 9: 127

cây bao trùm.

Function SpanningTree_DFS(r):
{
visited[r] = true

{
If (visited[u] == false) then
{
T = T (r, u)
SpanningTree_DFS(u)
}
}
}

Function SpanningTree_BFS(r):
{

visited[r] = true
do
{

{
if (visited[v] == false)
{

visited[v] = false
T = T (u, v)
}
}
}
}
128 BÀI 9:

9.1.3 Cây bao trùm nh nh t

G, EG G = {1, 2,

G nh.

M i c nh e b t k c a G có tr ng s là c(e). Gi s T = (VT , E T) là cây bao trùm


c th ng

Hình 9.4

(a) (b)

(c) (d)

Hình 9.4
BÀI 9: 129

Tuy
n-2

9.2 THU T TOÁN KRUSKAL


9.2.1 Mô t

1.

2.

3. .

4.

5. -

G, EG G

Function Kruskal
{
ET =
while (|E T | < n-1) and (EG ) do
{
G.

if (ET T = ET {e}
130 BÀI 9:

G.

}
if (|ET | < n-
}
9.1 G, EG ) trong hình

T =

1. G: e = (1, 3)

Do (ET T = {(1, 3)}

2. G: e = (4, 6)

Do (ET T = {(1, 3), (4, 6)}

3. G: e = (2, 5)

Do (ET T = {(1, 3), (4, 6), (2, 5)}

4. G: e = (3, 6)

Do (ET e) khôn T = {(1, 3), (4, 6), (2, 5), (3, 6)}

5. G: e = (2, 3)

Do (ET T = {(1, 3), (4, 6), (2, 5), (3, 6), (2, 3)}

6.

T = {(1, 3), (4, 6), (2, 5), (3, 6),


(2, 3)}.
BÀI 9: 131

Kh T = 1. E T = {(1, 3)} 2. E T = {(1, 3), (4, 6)}

3. ET = {(1, 3), (4, 6), 4. ET = {(1, 3), (4, 6), 5. ET = {(1, 3), (4, 6),
(2, 5)} (2, 5), (3, 6)} (2, 5), (3, 6), (2, 3)}

Hình 9.5:

9.3 THU T TOÁN PRIM


9.3.1 Mô t

G, EG G

G
132 BÀI 9:

Function Prim
{
.
T T = {s}
T T =

=0

for u VG \ VH do
{
D[u] = c(s, u)
near[u] = s
}
flag = false
while (flag == false) do
{
VG \ VH
V T = VT {u}
E T = ET {(u, near[u])}
if (|V T| == n) then
{
Thông báo T = (V T, ET
flag = true
}
else
{
for v V G \ V T do
{
if (D[v] > c[u, v]) then
{
D[v] = c[u, v]
near[v] = u
}
}
}
}
}
BÀI 9: 133
9.2 T = (VT, E T G, EG )

1. V T = {1}, VG V T = {2, 3, 4, 5, 6}, ET =

near D
VG VT VT
2 1 6
3 1 1
4 1 5
5 1
6 1

T.

T.

2. V T = {1, 3}, V G VT = {2, 4, 5, 6}, ET = {(1, 3)}

near D
VG VT VT
2 3 5
4 1 5
5 3 6
6 3 4

T.

T.

3. V T = {1, 3, 6}, VG V T = {2, 4, 5}, E T = {(1, 3), (3, 6)}

near D
VG VT VT
2 3 5
4 6 2
5 3 6

T.

T.
134 BÀI 9:

4. V T = {1, 3, 6, 4}, VG V T = {2, 5}, E T = {(1, 3), (3, 6), (6, 4)}

near D
VG VT VT
2 3 5
5 3 6

VT.

T.

5. V T = {1, 3, 6, 4, 2}, VG V T = {5}, ET = {(1, 3), (3, 6), (6, 4), (3, 2)}

near D
VG VT VT
5 2 3

T.

T.

6. V T = {1, 3, 6, 4, 2, 5}, V G VT = , ET = {(1, 3), (3, 6), (6, 4), (3, 2), (2, 5)}

T = {(1, 3), (3, 6), (6, 4), (3, 2), (2, 5)}.

1. V T = {1} 2. VT = {1, 3} 3. VT = {1, 3, 6}


BÀI 9: CÂY BA O TR 135

4. VT = {1, 3, 6, 4} 5. V T = {1, 3, 6, 4, 2} 6. V T = {1, 3, 6, 4, 2, 5}

Hình 9.6:
136 BÀI 9:

viên c n n m:

Câu 1:

a.

b.
BÀI 9: 137

c.

Câu 2:

Câu 3:

Câu 4:
138 BÀI 10:

BÀI 10:

-
-

10.1 N NH T

10.2 THU T TOÁN DIJKSTRA

1.

2.
V, và D[s] = 0.
BÀI 10: 139
3.

a.

b. Thêm u vào danh sách S.

c.

D[u] + c(u, v).

10.1

Hình 10.1:
1. S =

2. S = {0}, D =

3.

4.

5.

6. S = {0, 1, 7, 6, 5}, D =

7. S = {0, 1, 7, 6, 5, 2}, D = {0, 4, 12, 19, 21, 11, 9, 8, 14}.

8. S = {0, 1, 7, 6, 5, 2, 8}, D = {0, 4, 12, 19, 21, 11, 9, 8, 14}.

9. S = {0, 1, 7, 6, 5, 2, 8}, D = {0, 4, 12, 19, 21, 11, 9, 8, 14}.

10. S = {0, 1, 7, 6, 5, 2, 8, 4}, D = {0, 4, 12, 19, 21, 11, 9, 8, 14}.

n
140 BÀI 10:

Hình 10.2:

10.3 THU T TOÁN BELLMAN- FORD

1. các
V, và D[s] = 0.

2.

10.2 -

Hình 10.3: -Ford


Các b
BÀI 10: 141

(2, 5), (4, 2), (2, 4), (1, 2), (1, 3), (4, 3), (2, 3), (5, 4).

1.

- D = {0, -

- 3) D = {0, -

- D = {0, -

- D = {0, -

- D = {0, -

2.

- D = {0, -

- D = {0, -

- D = {0, -1, 2, 1, 1}

- D = {0, -1, 2, 1, 1}

- D = {0, -1, 2, 1, 1}

- D = {0, -1, 2, 1, 1}

- D = {0, -1, 2, 1, 1}

- D = {0, -1, 2, -2, 1}

3.
142 BÀI 10:

Hình 10.4:

10.4 THU T TOÁN FLOYD


-
toán Floyd-
-
:

1.

2.

3.

10.3
BÀI 10: 143

Hình 10.5:

1.

0 8 1
0 1
D=
4 0
2 9 0

2.

0 8 1
0 1
D=
4 12 0 5
2 9 0

3.

0 8 9 1
0 1
D=
4 12 0 5
2 3 0
144 BÀI 10:

4.

0 8 9 1
5 0 1 6
D=
4 12 0 5
7 2 3 0

5.

0 3 4 1
5 0 1 6
D=
4 7 0 5
7 2 3 0

Th
BÀI 10: 145

n n m:

toán Dijstra, Bellman-


Bellman-

Câu 1:

a.
146 BÀI 10:

b.

c.

d.
BÀI 10: 147

e.

Câu 2: -
ng bài 1.

Câu 3:

Câu 4:
-Floyd.

Câu 5:
148

1.

2.

3. Hoàng Chí Thành (2007).

4.
TP.HCM.

5. Lê Minh Hoàng. (1999 - 2002).

6. Robin J. Wilson (1996). Introduction to Graph Theory, fourth edition. Addison


Wesley Longman Limited.

7. Richard Neapolitan and Kumarss (2004). Foundations of Algorithms Using C++


Pseudocode. Jones and Bartlett Publishers.

8.

9.

10.

You might also like