Upload
vu-nguyen
View
215
Download
0
Embed Size (px)
Citation preview
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
1/72
LI M U
Gio trnh thc hnh ny c vit theo gio trnh Lp trnh nng cao nhm mc ch
lm ti liu cho sinh vin nm th 2 thc hnh mn hc ny. Ni dung ca gio trnh
gm 4 chng th hin c bn cc k thut lp trnh thng gp i vi sinh vin.
Chng 1. K thut lp trnh quy. Chng 2. Sp xp. Chng 3. i s ma trn. Chng 4. Mt s thut gii trn th.
Chng 1 th hin mt s k thut lp trnh lm nn tng cho cc chng sau. i vi
quy phi tuyn ch yu ta s dng k thut tm kim theo chiu su. K thut ny
c p dng trong chng 4 tm ng i trn th. Tuy nhin, y ta chatrnh bi k thut duyt theo chiu su bng cch kh quy. K thut ny s c
trnh bi trong gio trnh L thuyt th v thut gii.
Chng 2 th hin mt s thut ton sp xp nhm gip sinh vin so snh v nh gi
thut ton sp xp no s tt hn.
Chng 3 th hin phng php gii h phng tr nh tuyn tnh bng phng php
phn r ma trn bng thut ton Crout.
Chng 4 th hin mt s thut gii tm ng i c bn trn th p dng k thut
nh du nh, nh du cnh v k thut tham n.
V thi gian phn b ging dy theo chng trnh khung v ni dung ca mn hc ny
nn gio trnh khng trnh khi nhng khim khuyt. Rt mong nhn c s gp
ca tt c cc bn quan tm n gio trnh ny.
Ngy 24 thng 04 nm 2010
Tc gi
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
2/72
MC LC
CHNG 1. K THUT LP TRNH QUY 1Bi tp 1. Tm phn t Fibonacci th n 1Bi tp 2. Tnh X ly tha n 1Bi tp 3. Thut ton Euclide tm c chung ln nht 2
Bi tp 4. Tm
c chung l
n nh
t c
a n s
nguyn
3Bi tp 5. Tnh n giai tha 4
Bi tp 6. T hp chp k ca n phn t 4Bi tp 7. Tnh tng n phn t trong danh sch 5Bi tp 8. quy h tng 6Bi tp 9. Tch n phn t trong danh sch 7Bi tp 10. m s ln xut hin ca phn t x trong danh sch 8Bi tp 11. Thp H Ni 9Bi tp 12. Lit k tt c dy nh phn di k 10Bi tp 13. Chnh hp khng lp chp k ca n phn t 12Bi tp 14. Hon v mng s nguyn c n phn t 14Bi tp 15. t n qun hu trn bn cvua 16
Bi tp 16. Mi tun 18
CHNG 2. SP XP 20Bi tp 1. Thut ton Bubble Sort 20Bi tp 2. Thut ton Selection Sort 23Bi tp 3. Thut ton Insertion Sort 26Bi tp 4. Thut ton Quick Sort 28Bi tp 5. Thut ton Heap Sort 30Bi tp 6. Thut ton Merge Sort 34
CHNG 3. I S MA TRN 36
Bi tp 1. Nhp xut ma trn 36Bi tp 2. Mt s php ton trn ma trn 37Bi tp 3. H phng trnh tuyn tnh dng tam gic trn 39Bi tp 4. H phng trnh tuyn tnh dng tam gic di 41Bi tp 5. Thut ton phn r ma trn A = LU 44Bi tp 6. Gii h phng trnh tuyn tnh da vo phn r LU 46Bi tp 7. nh thc ca ma trn 49
CHNG 4. MT S THUT GII TRN TH 51Bi tp 1. Xt tnh lin thng ca th 51Bi tp 2. m s thnh phn lin thng 53Bi tp 3. Tm mi ng i t gia hai nh 56Bi tp 4. ng i Hamilton 58Bi tp 5.ng i Euler 61Bi tp 6. Thut ton Dijkstra tm ng i ngn nht 63Bi tp 7. Thut ton Prim tm cy bao trm ti tiu 65Bi tp 8. Thut ton Kruskal tm cy bao trm ti tiu 67
TI LIU THAM KHO 70
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
3/72
Trang 1
CHNG 1. K THUT LP TRNH QUY
Bi tp 1. Tm phn t Fibonacci th n
Vit chng trnh tm phn t Fibonacci th n c nh ngha quy nh sau:
1,21
10,1)(
nnFnF
nnnF
Ci t:#include
#include
/*Ham tra ve so nguyen tinh gia tri Fibonacci thu n*/
int F(int n) {
if(n==0 || n==1)
return 1;else
return F(n-1) + F(n-2);
}
/*Chuong trinh chinh*/
void main() {
clrscr();
int n;
coutn;
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
4/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
5/72
Trang 3
Bi tp 4. Tm c chung ln nht ca n s nguyn
Vit chng trnh tm c chung ln nht ca n s nguyn dng 10 ,..., naa c nh
ngha quy nh sau:
1,1,,...,,
1,,,...,
201
0
10
nnaaUCaUCLN
nanaaUC
nn
n
Ci t:
#include #include
/*Ham tra ve uoc chung lon nhat cua a va b*/
int UCLN(int a, int b) {
if(a==b)
return a;
else if(a>b)
return UCLN(a-b,b);
else
return UCLN(a,b-a);
}
/*Ham tra ve uoc chung lon nhat cua n phan tu duoc luu tru trong mang 1 chieu a*/
int UC(int a[], int n) {
if(n==1)
return a[0];
else
return UCLN(a[n-1],UC(a,n-1));
}
void main() {
clrscr();
int *a,n;
coutn;
a = new int[n];
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
6/72
Trang 4
Bi tp 5. Tnh n giai tha
Vit chng trnh tnh n! c nh ngha quy nh sau:
1,!1*
0,1!
nnn
nn
Ci t:#include
#include
/*Ham tra ve so nguyen tinh n! (Factorial)*/
long int Fac(int n) {
if(n==0)
return 1;
else
return n*Fac(n-1);
}
/*Chuong trinh chinh*/
void main() {
clrscr();
int n;
coutn;
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
7/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
8/72
Trang 6
Bi tp 8. quy h tng
Vit chng trnh tnh nX v nY c xc nh nh sau:
11
11
0
0
2
1
1
nnn
nnn
YXY
YXX
Y
X
Ci t:#include
#include
long int Y(int n);
long int X(int n) {
if(n==0)
return 1;
else
return X(n-1) + Y(n-1);
}
long int Y(int n) {
if(n==0)
return 1;
else
return 2*X(n-1)*Y(n-1);
}
/*Chuong trinh chinh*/
void main() {
clrscr();
int n;
coutn;
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
9/72
Trang 7
Bi tp 9. Tch n phn t trong danh sch
Vit chng trnh tnh tch n phn t 10 ,..., naa c nh ngha quy nh sau:
1,1,,...,
1,,,...,
201
0
10 nnaaSa
nanaaS
nnn
Ci t:#include
#include
/*Ham tra ve so nguyen tinh tich n phan tu trong mang a*/
long int S(int a[], int n) {
if(n==1)
return a[0];
else
return a[n-1]*S(a,n-1);
}/*Chuong trinh chinh*/
void main() {
clrscr();
int *a,n;
coutn;
a = new int[n];
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
10/72
Trang 8
Bi tp 10. m s ln xut hin ca phn t x trong danh sch
Vit chng trnh m s ln xut hin ca s nguyn x trong danh sch
10 ,..., naaA vi n phn t. Thut ton quy c th hin nh sau:
xanxnAFind
xanxnAFind
n
xnAFind
n
n
0,,1,
0,,1,1
0,0
,,
Ci t:#include
#include
/*Ham tra ve so lan xuat hien cua x trong danh sach A*/
int Find(int a[], int n, int x) {
if(n==0)
return 0;
else
if(a[n-1]==x)
return 1+Find(a,n-1,x);
else
return Find(a,n-1,x);
}
/*Chuong trinh chinh*/
void main() {
clrscr();
int *a,n,x;
coutn;
a = new int[n];
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
11/72
Trang 9
Bi tp 1 1 . Thp H Ni
M t bi ton: chuyn n a t ct 1 sang ct 2 ly ct 3 lm trung gian. Th t cca c sp xp t nh n ln (a ln nm pha di).
V d: n = 3 ta c cc bc chuyn 12, 13, 23, 12, 31, 32, 12.
Ci t:#include "conio.h"
#include "iostream.h"
/*Thap Ha Noi*/
void Move(int n, int a, int b) {
if (n==1)
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
12/72
Trang 10
Bi tp 12. Lit k tt c dy nh phn di k
Chnh hp lp chp k ca n phn t l mt nhm c th t gm k phn t ly t nphn t cho, trong mi phn t c th c mt 1, 2, , k ln trong nhm to
thnh.
Phng php: ta lit k tt c chnh hp c lp chp kca hai phn t 0 v 1. Khi ta s c tt c dy nh phn c di k.
V d: minh ha dng cy vi k = 3.
Ci t:#include "conio.h"
#include "iostream.h"
#define max 20
int Luu[max];
int k;
/*Xuat ket qua ra man hinh*/
void Out() {
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
13/72
Trang 11
}
}
/*Chuong trinh chinh*/
void main() {
clrscr();
coutk;
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
14/72
Trang 12
Bi tp 13. Chnh hp khng lp chp k ca n phn t
Chnh hp chp k ca n phn t ( nk ) l mt nhm c th t gm k phn t khcnhau c chn t n phn t cho.
Phng php: lit k dy c di k v cc phn t trong dy c ly t tp hp {0,
1, , n-1} cc phn t c a vo dy khng c php trng nhau.
V d:n = 3 v k = 2 ta s c cc dy con {0,1}, {0,2}, {1,0}, {1,2}, {2,0} v {2,1}.
Ci t:#include "conio.h"
#include "iostream.h"
#define max 20
char DanhDau[max];
int Luu[max];
int n,k;
/*Khoi tao cac bien*/void Init() {
coutn;
coutk;
//khoi tao tat ca cac dinh chua duoc chon
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
15/72
Trang 13
}
}
}
/*Chuong trinh chinh*/
void main() {
clrscr();
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
16/72
Trang 14
Bi tp 14. Hon v mng s nguyn c n phn t
Phng php: tng t phng php lm bi tp 13 nhng y ta thay tp hp {0, 1, , n-1} l tp hp gi tr n phn t ca mng v di ca dy l n.
V d:n = 3 v A = {-1,0,1} ta s c cc dy con tng ng l {-1,0}, {-1,1}, {0,-1},
{0,1}, {1,-1} v {1,0}.
Ci t:#include "conio.h"
#include "iostream.h"
#define max 20
char DanhDau[max]; //mang danh dau dinh duoc chon
int Luu[max], A[max],n;
/*Khoi tao cac bien*/
void Init() {
coutn;
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
17/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
18/72
Trang 16
Bi tp 15. t n qun hu trn bn c vua
M t bi ton: lit k tt c phng n t n qun hu trn bn c vua cp nn saocho n qun hu khng c php n nhau.
V d: cho bn c vua cp 88 . Di y l 1 phng n t qun hu:
Ci t:#include "conio.h"
#include "iostream.h"
#define max 20
char a[max]; //danh dau cot
char b[2*max-1]; //danh dau huong Dong-Bac
charc[2*max-1]; //danh dau huong Tay-Bac
int Luu[max]; //luu ket qua tim duoc
int n;
/*Khoi tao cac bien*/
void Init() {
coutn;
//tat ca cac cot chua duoc chon
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
19/72
Trang 17
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
20/72
Trang 18
Bi tp 16. Mi tun
M t bi ton: t qun m ti c v tr (x,y) trn bn c vua cp nn . Hy lit ktt c cc phng n qun m xut pht ti v tr (x,y) c th nhy n tt c cc khc
trn bn c vi iu kin mi qun m ch c php i qua ng 1 ln.
V d: cho bn c vua cp 88 . Ta c 2 phng n t qun m nh sau:
Ci t:#include "iostream.h"
#include "conio.h"
#define max 10
intA[max][max]; //Mang danh dau
int B[max][max]; //Mang luu duong di
intX[8]={-1,-2,-2,-1,1,2,2,1};intY[8]={-2,-1,1,2,2,1,-1,-2};
intn, x, y, Dem=0;
//Khoi tao
void Init() {
coutn;
coutx;
couty;for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
21/72
Trang 19
void Out() {
Dem++;
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
22/72
Trang 20
CHNG 2. SP XP
Bi tp 1. Thut ton Bubble Sort
tng thut ton:xut pht t phn t cui danh sch ta tin hnh so snh vi phn
t bn tri ca n. Nu phn t ang xt c kha nh hn phn t bn tri ca n tatin a n v bn tri ca dy bng cch hon v vi phn t bn tri ca n. Tip tc
thc hin nh th i vi bi ton c n phn t th sau n 1 bc ta thu c danhsch tng dn.
Vd: s dng thut ton Bubble Sort sp xp dy s {3, 10, 4, 6, 2, 6, 15, 3, 9,7} theo
th t tng dn.
Sau 9 bc lp ta thu c dy c sp xp: {2, 3, 3, 4, 6, 6, 7, 9, 10, 15}.
Ci t:#include
#include
#define max 100
//nhap mang
void NhapMang(int A[],int n) {
for(int i=0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
23/72
Trang 21
//hoan vi 2 phan tu
void Swap(int &a,int &b) {
int temp = a;
a = b;
b = temp;
}
//sap xep cac phan tuvoid BubbleSort(int A[],int n) {
for(int i = 0; i < n-1; i++)
for(int j = n-1; j > i; j--)
if(A[j]
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
24/72
Trang 22
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
25/72
Trang 23
Bi tp 2. Thut ton Selection Sort
tng thut ton: xt dy n phn t 110 ,...,, naaa .
Chn trong dy 110 ,...,, naaa ra phn t c kha nh nht v hon v n vi a0.
Chn trong dy 121 ,...,, naaa ra phn t c kha nh nht v hon v n vi a1. C tip tc nh th sau n 1 bc ta thu c danh sch c th t.V d:
Sau 9 bc lp ta thu c dy c sp xp: {2, 3, 4, 5, 6, 6, 7, 7, 8, 9}.
Ci t:#include
#include
#define max 100//nhap mang
void NhapMang(int A[],int n) {
for(int i=0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
26/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
27/72
Trang 25
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
28/72
Trang 26
Bi tp 3. Thut ton Insertion Sort
tng thut ton: xt dy n phn t 110 ,...,, naaa .
Xem dy gm 1 phn t a0 l dy c th t. Thm a1 vo dy c th t a0 sao cho dy mi a0, a1 l dy c th t. Nu a1 < a0 ta
hon v a1 vi a0. Thm a2 vo dy c th t a0, a1 sao cho dy mi a0, a1, a2 l dy c th t. Tip tc nh th n n 1 bc ta s c dy c th t 110 ,...,, naaa .V d: s dng thut ton Insertion Sort sp xp dy {3,7,22,3,1,5,8,4,3,9} theo th t
tng dn.
Ci t:#include
#include #define max 100
//nhap mangvoid NhapMang(int A[],int n) {
for(int i=0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
29/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
30/72
Trang 28
Bi tp 4. Thut ton Quick Sort
tng thut ton: xt dy n phn t 110 ,...,, naaa .
Bc 1: chn kha 2/RightLeftapivot .
Bc 2: Phn vng. Nhng phn t nh hn kha th nm bn tri ca kha, nhng
phn t ln hn kha th nm bn phi ca kha v nhng phn t bng khac th nm bt c ch no trn dy.
Bc 3: sp xp cho c hai phn vng mi bn tri v bn phi.
M t hot ng ca thut ton Quick Sort:
Ci t:#include #include
#define max 100
void NhapMang(int A[],int n) {for(int i=0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
31/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
32/72
Trang 30
Bi tp 5. Thut ton Heap Sort
Ta xem danh sch n phn t 110 ,...,, naaa l cy nh phn. Cy nh phn ny c xc
nh nh sau: ti nt th i tng ng vi ch s th i ca mng c con tri l nt2*(i+1)-1 v con phi 2*(i+1) nu 2*(i+1)-1 v 2*(i+1) nh hn n. Thut ton c
m t nh sau:- Xy dng Heap sao cho vi mi nt cha u c gi tr ln hn nt con. Khi nt
gc l nt c gi tr ln nht.- Hon v nt gc vi nt th n 1 v xy dng li Heap mi vi n 2 nt v tip
tc hon v nt gc vi nt l cui ca cy mi sau n 2 bc ta s thu c danhsch c sp xp theo th t.
V d: xt danh sch trc khi sp xp0 1 2 3 4 5 6 7
11 3 5 4 9 15 19 7
Danh sch trn c th hin bng cy theo thut ton Heap Sort nh sau:
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
33/72
Trang 31
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
34/72
Trang 32
Sau 7 bc ta thu c danh sch c sp xp
0 1 2 3 4 5 6 7
3 4 5 7 9 11 15 19
Ci t:#include
#include #define max 100
void NhapMang(int A[],int n) {
for(int i=0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
35/72
Trang 33
Largest = Right;
if(i!=Largest) {
Swap(A[i],A[Largest]);
Heapify(A,n,Largest);
}
}
//xay dung Heap sao cho moi nut cha luon lon hon nut con tren cayvoid BuildHeap(int A[], int n) {
for(int i = n/2-1; i>=0; i--)
Heapify(A,n,i);
}
void HeapSort(int A[], int n) {
BuildHeap(A,n);
for(int i = n-1; i>0; i--){
Swap(A[0],A[i]);
Heapify(A,i,0);
}
}
void main() {
int A[max], n;
clrscr();
coutn;
NhapMang(A,n);
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
36/72
Trang 34
Bi tp 6. Thut ton Merge Sort
M t bi ton: cho 2 danh sch A v B ln lt c m v n phn t sp xp theo th
t. Bi ton t ra trn 2 danh sch A v B vi nhau thnh danh sch C cng l mtdanh sch c th t.
Thut ton:
Bc 1: khi to ba ch s chy trong vng lp i = 0, j = 0, k = 0 tng ng cho bamng A, B v C.
Bc 2: ti mi bc nu c hai ch s (i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
37/72
Trang 35
k++;
}
if (i < m) {
for (int p = i; p < m; p++) {
C[k] = A[p];
k++;
}} else {
for (int p = j; p < n; p++) {
C[k] = B[p];
k++;
}
}
}
void main() {
int A[max],B[max],C[max],n,m,k;
clrscr();
coutn;
coutm;
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
38/72
Trang 36
CHNG 3. I S MA TRN
Bi tp 1. Nhp xut ma trn
Phng php: ta t chc mng hai chiu lu tr cc phn t trong ma trn.Ci t:#include "conio.h"
#include "iostream.h"
#define max 100
/*Nhap ma tran he so*/
void NhapMaTran(float A[max][max], int m, int n) {
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
39/72
Trang 37
Bi tp 2. Mt s php ton trn ma trn
Cng ma hai ma trnCho ijaA v ijbB l hai ma trn cng cp nm . Khi BAC cng l
ma trn cp nm v c xc nh bi njmibac ijijij 1,1, .
Nhn hai ma trnCho ijaA l ma trn cp nm v jkbB l ma trn cp pn . Khi
ikcBAC . l ma trn cp pm v c xc nh nh bi
n
jjkijik bac
1
vi
mi ...,,1 v pk ...,,1 .
Ci t:#include "conio.h"#include "iostream.h"
#define max 100/*Nhap ma tran he so*/
void NhapMaTran(float A[max][max], int m, int n, char ch) {
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
40/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
41/72
Trang 39
Bi tp 3. H phng trnh tuyn tnh dng tam gic trn
Cho h phng trnh tuyn tnh dng tam gic trn:
B
n
X
n
A
nn
n
n
b
b
b
x
x
x
a
aa
aaa
......
.....00
........
.....0
.....
2
1
2
1
222
11211
niaaaaA iinn ,...,2,1,00...det 2211 .
Nghim ca h trn c xc nh nh sau:
1,...,2,1,1
,...,2,1,
1
nnixaba
x
a
bx
nibxa
BAX
n
ijjiji
iii
nn
nn
i
n
ijjij
Ci t:#include "conio.h"
#include "iostream.h"
#define max 100//Nhap ma tran tam giac tren
void Nhap(float A[max][max],int n) {
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
42/72
Trang 40
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
43/72
Trang 41
coutn;
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
44/72
Trang 42
for(int j = 0; j
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
45/72
Trang 43
else {
X[i] = B[i];
for(int j=0; j
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
46/72
Trang 44
Bi tp 5. Thut ton phn r ma trn A = LU
Qu trnh chuyn ho ma trn A ban u thnh tch hai ma trn tam gic UL. da vophp kh Gauss c thc hin bng cc php nhn ma trn. Thut ton ny c gil thut ton Crout. Qu trnh Crout bao gm nhiu bc hi quy. Nu ma trn A c
cp nn ta cn 1n bc. Thut ton c th hin c th nh sau:
nnT
T
n
T
n
a
a
aCrout
aULvwH
w
IvHv
w
A
1
11
11
1111
110
01
1
111
11
2
222
11211
1
21
0
01
.....0
...........
.....0
.....
1.....0
...........
0.....1
0.....01
n
T
n
nnn
n
n
n
A
uul
aa
aa
uuu
l
l
I
1
111
1111
111
112 0
01
0
01
n
T
nnn
T
n
uu
l
uu
lCrout
ULULI
....
00......
00
....0
....
......
0.....01
0.....001
2
222
11211
21
2
3231
21
Crout
uu
uuu
ll
ll
l
n
n
n
nn
n
AI
UL.
....00
..........
....0
...
1.....
...........
0.....1
0.....01
222
11211
21
21
1
nn
n
n
nn
n
u
uu
uuu
ll
lCrout
Thng qua 1n bc hi quy ta c ULA . vi L l ma trn tam gic di v Ul ma trn tam gic trn.Ci t:
#include "conio.h"#include "iostream.h"
#define max 100
void Nhap(float A[max][max],int n) {
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
47/72
Trang 45
}
}
void XuatMaTran(float A[max][max], int n) {
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
48/72
Trang 46
Bi tp 6. Gii h phng trnh tuyn tnh da vo phn r LU
tng thut ton: cho h phng trnh tuyn tnh tng qut BXA . . Ta tin hnhphn r ULA . . Trong , L l ma trn tam gic di v U l ma trn tam gic trn.
Khi ,
YXUBYLBXULBXA
.....
Ci t:#include "conio.h"
#include "iostream.h"
#define max 100
/*Nhap ma tran he so*/
void Nhap(float A[max][max],int n) {
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
49/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
50/72
Trang 48
L[i][k] = A[i][k]/U[k][k];
U[k][i] = A[k][i];
U[i][k] = 0;
L[k][i] = 0;
}
for(i = k+1; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
51/72
Trang 49
Bi tp 7. nh thc ca ma trn
tng thut ton: ta tin hnh phn r ma trn ULA . .
Ta c: Det(A)=Det(L)*Det(U) m Det(L) = 1 nn Det(A) = Det(U).
Ci t:
#include "conio.h"#include "iostream.h"
#define max 100
/*Nhap ma tran*/
void Nhap(float A[max][max],int n) {
for(int i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
52/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
53/72
Trang 51
CHNG 4. MT S THUT GII TRN TH
Bi tp 1 . Xt tnh lin thng ca th
M t bi ton: cho th v hng G=(V,E) hy kim tra tnh lin thng ca th G.
tng thut ton:
Bc 1:xut pht t mt nh bt k ca th. Ta nh du nh xut pht v chuynsangBc 2.
Bc 2: t mt nh i nh du, ta nh du nh j nu A[i,j] = 1 v j cha c nhdu v chuyn sangBc 3.
Bc 3: thc hin Bc 2 cho n khi khng cn thc hin c na chuyn sangBc 4.
Bc 4: kim tra nu snhnh du nh hn n (hay tn ti t nht mtnh cha cnh du) th s khng lin thng v ngc li th lin thng.
M t d liu u vo v u ra ca bi ton:D liu vo: cho trong tp tin Bai1.inp
- Dng u ghi s n l s nh ca mt th (0
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
54/72
Trang 52
Ci t:#include
#include
#include
#define TenFile "Bai1.inp"
//doc du lieu tu tap tin
void Doc_File(int **A,int &n) {
FILE*f = fopen(TenFile,"rb");
fscanf(f,"%d",&n);
*A = new int [n];
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
55/72
Trang 53
}
}
}while (ThanhCong == 0); //lap lai cho den khi khong con kha nang loan
return 0;
}
//chuong trinh chinh
void main(){
clrscr();
int **A,n;
Doc_File(A,n);
if (Lien_Thong(A,n)==1)
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
56/72
Trang 54
Bai2.inp OUTPUT
6
0 1 1 0 0 0
1 0 1 0 0 0
1 1 0 0 0 0
0 0 0 0 1 1
0 0 0 1 0 1
0 0 0 1 1 0
THANH PHAN
LIEN THONG: 2
Bai2.inp OUTPUT
8
0 1 0 0 0 1 0 0
1 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0
0 0 1 0 1 0 0 0
0 0 0 1 0 1 0 0
1 0 0 0 1 0 1 0
0 0 0 0 0 1 0 1
0 0 0 0 0 0 1 0
THANH PHAN
LIEN THONG: 1
Ci t:#include
#include
#include
#define TenFile "Bai2.inp"
//doc du lieu tu tap tin
void Doc_File(int **A,int &n) {
FILE*f = fopen(TenFile,"rb");
fscanf(f,"%d",&n);
*A = new int [n];
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
57/72
Trang 55
int Dem=0, i,j, MLT=0;
for( i = 0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
58/72
Trang 56
Bi tp 3. Tm mi ng i t gia hai nh
M t bi ton: cho th v hng G=(V,E) hy xc nh mi ng i t nh D tinh C ca th G.
tng thut ton: s dng k thut tm kim theo chiu su.
M t d liu u vo v u ra ca bi ton:D liu vo: th lin thng v cho trong tp tin Bai3.inp
- Dng u ghi s n l s nh ca mt th (0
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
59/72
Trang 57
FILE*f = fopen(FileIn,"rb");
fscanf(f,"%d%d%d",&n,&D,&C);
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
60/72
Trang 58
L[SoCanh] = 0;
DanhDau[i] = 0; //phuc hoi dinh da di qua
}
}
}
//chuong trinh chinh
void main() {Doc_File();
KhoiTao();
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
61/72
Trang 59
Bai4.inp OUTPUT
5
1
0 1 0 0 0
1 0 1 1 1
0 1 0 1 0
0 1 1 0 1
0 1 0 1 0
12345
Ci t:#include
#include
#include
#define FileIn "Bai4.inp"
int Dem = 0; //dem so duong di
int *L; //luu duong di
char *DanhDau; //danh dau dinh da diint **A,n,D;
//doc du lieu tu tap tin theo yeu cau cua bai toan
void Doc_File() {
FILE*f = fopen(FileIn,"rb");
fscanf(f,"%d%d",&n,&D);
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
62/72
Trang 60
L[0] = D;
}
//xuat duong di ra man hinh
void InDuongDi(int Dinh) {
Dem++;
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
63/72
Trang 61
Bi tp 5. ng i Euler
M t bi ton: cho th v hng G=(V,E) hy xc nh mi ng i qua tt c cccnh mi cnh ch qua duy nht 1 ln.
tng thut ton: s dng k thut tm kim theo chiu su bng cch xa cnh
i qua trong qu trnh tm kim ng i.
M t d liu u vo v u ra ca bi ton:D liu vo: cho trong tp tin Bai5.inp
- Dng u ghi s n l s nh ca mt th (03->4->5->2->1
Ci t:#include
#include
#include #define Filename "Bai5.inp"
int Dem = 0, SoCanh=0; //dem so duong di va luu so canh cua do thi
int *L; //luu dinh da di quaint **A,n;
int XuatPhat=0; //dinh xuat phat la dinh bac le neu do thi co dinh bac le
void Doc_File() {
int BacDinh;
FILE*f = fopen(Filename,"rb");
fscanf(f,"%d",&n);
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
64/72
Trang 62
if(A[i][j] == 1)
BacDinh++;
}
if(BacDinh%2==1)
XuatPhat = i; //xuat phat tu dinh bac le
SoCanh+=BacDinh;
cout
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
65/72
Trang 63
Bi tp 6. Thut ton Dijkstra tm ng i ngn nht
M t bi ton: cho th v hng G=(V,E) hy xc nh ng i ngn nht t nhD ti nh C ca th G.
tng thut ton: s dng thut ton Dijkstra.
M t d liu u vo v u ra ca bi ton:D liu vo: th lin thng v cho trong tp tin Bai6.inp.
- Dng u ghi s n l s nh ca mt th (0
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
66/72
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
67/72
Trang 65
Bi tp 7. Thut ton Prim tm cy bao trm ti tiu
M t bi ton: cho th v hng c trng s G=(V,E) hy tm ng i sao cho ttc cc nh iu c ng i vi nhau v tng trng s ca ng i l nh nht. Tc l
tm th con lin thng GG ' sao cho tng trng s ca G l nh nht.
tng thut ton:
Bc 1: xut pht t nh k bt k (thng thng chn nh u tin) chn mt cnh ctrng s nh nht lin k vinh k (min{A[k][j]}j=1..n) ta nh du 2 nh i quacnh v s cnh tm c l 1. Chuyn sangBc 2.
Bc 2: tm cnh nh nht ca th viiu kin cnh tm c phi c 1 nh cha
nh du v 1 nh nh du. Ngha l, ta tm min{A[i][j]}j=1..n, i=1..n saocho i nhu v j cha nh du trnh trng hp to thnh chu trnh
con. Ta tng s cnh tm c ln 1 v chuyn sangBc 3.
Bc 3: nu s cnh tm c bng n-1 kt thc thut ton, ngc li quay vBc 2.
M t d liu u vo v u ra ca bi ton:D liu vo: lu trong tp tin Bai7.inp
- Dng u ghi s n l s nh ca mt th (0
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
68/72
Trang 66
//doc du lieu tu tap tin
void Doc_File(int A[max][max],int &n) {
FILE*f = fopen(FileInt,rb);
fscanf(f,%d,&n);
for(int i =0;i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
69/72
Trang 67
L[Dem].x = i;
L[Dem].y = j;
}
Sum+=min;
D[L[Dem].y] = 1;
Dem++;
} while(Dem
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
70/72
Trang 68
V d:
Bai8.inp Bai8.out8
0 2 3 4 0 0 0 0
2 0 3 0 4 0 0 0
3 3 0 7 6 5 2 0
4 0 7 0 0 0 3 00 4 6 0 0 4 0 8
0 0 5 0 4 0 1 6
0 0 2 3 0 1 0 5
0 0 0 0 8 6 5 0
20
6 - 7
1 - 2
3 - 7
1 - 34 - 7
2 - 5
7 - 8
Ci t:#include
#include
#define FileInt "Bai8.inp"#define FileOut "Bai8.out"
typedef struct Egde {
int x,y;
};
//doc du lieu tu tap tin
void Doc_File(int **A,int &n) {
FILE*f = fopen(FileInt,"rb");
fscanf(f,"%d",&n);
*A = new int [n];
for(int i =0;i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
71/72
Trang 69
int min = MAXINT, Dem = 0, Sum = 0, T = 0, Temp;
for(int i=0; i
8/6/2019 Gtth Lap Trinh Nang Cao_dhcl
72/72
TI LIU THAM KHO
[1] Chu c Khnh, Nguyn Cam, L thuyt th, NXB i hc Quc giaTPHCM.
[2]
Dng Thy V, Gio trnh Phng php tnh, NXB KHKT.[3] Ngc Anh Th, Gio trnh thut ton, NXB Thng k.[4] Ng c Tn,L thuyt t hp v th, NXB H Quc gia H Ni.[5] Dng V Diu Tr, Nguyn Tin Huy, Trn an Th, V Mnh Trng, Cm
nang thut ton, NXB KHKT.
[6] Xun Li, Cu trc d liu & Gii thut, 1995.[7] Nguyn c Ngha, T Vn Thnh, Ton ri rc, 1997.[8] A.V. Aho, J.E. Hopcroft, J.D. Ullman, Data Structures and Algorithms, Addison
Wesley, 1983.
[9] Jeffrey H Kingston,Algorithms and Data Structures, Addison-Wesley, 1998.