Professional Documents
Culture Documents
LY THUYET O TH VA
THUAT GIAI
MC LC
MT S BI TON...................................................................................................2
BI TON 1.................................................................................................................2
BI TON 2.................................................................................................................3
BI TON 3.................................................................................................................4
BI TON 4.................................................................................................................5
BI TON 6.................................................................................................................7
BI TON 7.................................................................................................................8
BI TON 8.................................................................................................................9
BI TON 9...............................................................................................................10
BI TON 10.............................................................................................................11
HNG DN CI T BI TON......................................................................12
BI TON 1...............................................................................................................12
BI TON 2...............................................................................................................17
BI TON 3...............................................................................................................20
BI TON 4...............................................................................................................22
BI TON 5...............................................................................................................25
BI TON 6...............................................................................................................32
BI TON 7...............................................................................................................35
BI TON 8...............................................................................................................38
BI TON 9...............................................................................................................43
BI TON 10.............................................................................................................48
Trang 1
MT S BI TON
BI TON 1
Vit chng trnh tm bc cao nht ca nh trong th vi th v hng A[i,j]
vi A[i,j]=1 nu c ng i t i n j v ngc li A[i,j] = 0 nu khng c ng i
t i n j.
D liu vo: cho trong file Bai1.inp
- Dng u ghi s n l s nh ca mt th (0<n<100).
- Dng i+1 ( 1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: thng bo kt qu ra mn hnh s bc cao nht ca nh trong th cho.
V d:
Bai1.inp
Kt qu:
6
011000
100110
100010
010010
011101
000010
Bai1.inp
Kt qu:
5
01001
10111
01001
01001
11110
Yu cu x l:
a) Tm nh c bc cao nht.
b) Tm bc nh nht ca nh.
c) Tm nh c bc nh nht.
d) Tnh tng bc ca th.
e) m s nh bc chn v bc l.
Kt qu:
V d:
a) nh 2,5.
b) Bc 2.
c) nh 1,3,4.
d) Tng bc ca th 14.
e) S nh bc chn 5, s nh bc l 0.
Trang 2
BI TON 2
Vit chng trnh kim tra tnh lin thng ca mt th v hng A[i,j] vi A[i,j]=1
nu c ng i t i n j v ngc li A[i,j] = 0 nu khng c ng i t i n j.
D liu vo: cho trong file Bai2.inp
- Dng u ghi s n l s nh ca mt th (0<n<100).
- Dng i+1 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: thng bo kt qu ra mn hnh DO THI LIEN THONG hay DO THI KHONG
LIEN THONG.
V d:
Bai2.inp
Kt qu:
5
00001
00100
01010
00101
10010
Bai2.inp
Kt qu:
8
01000100
10100000
01010000
00101000
00010100
10001010
00000101
00000010
Bai2.inp
Kt qu:
6
011000
101000
110000
000011
000101
000110
Trang 3
BI TON 3
Vit chng trnh m s thnh phn lin thng ca th v hng Anxn vi:
- A[i,j] = 1 nu c ng i t i n j.
- A[i,j] = 0 nu khng c ng i t i n j.
- A[i,j] = A[j,i].
D liu vo: cho trong file Bai2.inp ni dung d liu ging d liu Bi Ton 2.
D liu ra: hin th s thnh phn lin thng ca th ra mn hnh.
V d:
Bai3.inp
Kt qu:
6
011000
101000
110000
000011
000101
000110
Bai3.inp
Kt qu:
5
00001
00100
01010
00101
10010
Bai3.inp
Kt qu:
8
01000100
10100000
01010000
00101000
00010100
10001010
00000101
00000010
Trang 4
BI TON 4
C n thnh ph bit rng ng i gia hai cc thnh ph (nu c) l ng i hai
chiu. S mng li giao thng ca n thnh ph cho bi ma trn Anxn trong :
a. A[i,j] = 1 nu c ng i t thnh ph i n thnh ph j.
b. A[i,j] = 0 nu khng c ng i t thnh ph i n thnh ph j.
c. A[i,j] = A[j,i].
Hy xc nh mi ng t thnh ph D n thnh ph C (nu c).
D liu vo: cho trong file Bai4.inp
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng th hai lu nh D v nh C.
- Dng i+2 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: Xut ra mn hnh mi ng i t nh D n C hay thng bo khng tn
ti ng i t D n C.
V d:
Bai4.inp
Kt qu:
5
15
01001
10110
01010
01101
10010
1->2->3->4->5
1->2->4->5
1->5
Bai3.inp
Kt qu:
5
15
01011
10101
01010
10101
11010
1->2->3->4->5
1->2->5
1->4->3->2->5
1->4->5
1->5
Bai4.inp
Kt qu:
6
14
011000
101000
110000
000011
000101
000110
Trang 5
BI TON 5
Mt li giao thng hai chiu gia n a im c cho bi ma trn A[i,j] trong
A[i,j]=1 nu c ng i t i n j, cn A[i,j] = 0 trong trng hp ngc li. Mt
ngi a th cn i qua tt c cc con ng ny pht th, mi ng ch qua
mt ln. Hy xc nh mt l trnh ca ngi a th ny (c th tn ti nhiu l
trnh khc nhau) hay thng bo khng tn ti ng nh vy.
D liu vo: cho trong file Bai5.inp.
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng i+1 ( 1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: In ra mn hnh ng i ca ngi a th (nu c).
V d:
Bai5.inp
Kt qu:
5
01000
10111
01010
01101
01010
1->2->3->4->2->5->4
Bai5.inp
Kt qu:
5
01000
10111
01011
01101
01110
Bai5.inp
Kt qu:
5
01001
10110
01010
01101
10010
2->1->5->4->2->3->4
Trang 6
BI TON 6
Mt ngi khch du lch mun i thm n thnh ph c nh s t 1 n n, mi
thnh ph ngi khch ch mun i qua chng mt ln. Mng li giao thng gia n
thnh ph l hai chiu v c cho bi ma trn A[i,j] trong A[i,j] =1 nu c
ng i gia thnh ph i v thnh ph j, A[i,j] = 0 trong trng hp ngc li.
Hy vit chng trnh thit lp cho ngi khch mt l trnh (c th tn ti
nhiu l trnh) hay thng bo khng tn ti l trnh theo yu cu ca khch.
D liu vo: cho trong file Bai6.inp
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng 2 ghi nh m ngi khch du lch xut pht.
- Dng i+1 ( 1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: In ra mn hnh ng i ca ngi khch (nu c).
V d:
Bai6.inp
Kt qu:
5
1
01000
10111
01010
01101
01010
1->2->3->4->5
Bai6.inp
Kt qu:
6
1
011000
101010
110001
000010
010100
001000
Bai6.inp
Kt qu:
6
1
011000
101000
110000
000011
000101
000110
Trang 7
BI TON 7
C n thnh ph bit rng ng i gia cc thnh ph l ng i hai chiu. S
mng li giao thng ca n thnh ph cho bi ma trn A[i,j] trong :
- A[i,j] l di ng i t thnh ph i n thnh ph j.
- A[i,j] = 0 nu khng c ng i t thnh ph i n thnh ph j.
- A[i,j] = A[j,i]
- A[i,j] nguyn, khng m.
Hy xc nh ng i ngn nht t thnh ph D n thnh ph C.
D liu vo: th lin thng v cho trong file Bai7.inp
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng th hai lu nh D v nh C.
- Dng i+2 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: xut ra mn hnh ng i ngn nht t nh D n C v gi tr ng i
ngn nht tm c.
V d:
Bai7.inp
Kt qu:
16
1->2->4->6
012000
102230
220540
025032
034304
000240
Bai7.inp
Kt qu:
16
014000
102650
420730
067001
053003
000130
1->2->4->6
Trang 8
BI TON 8
Mt cng ty cn thay ton b h thng dy in cho n phng lm vic. Cho bit s
in hin c ca n cn phng ny c biu din bng ma trn A[i,j] trong :
- A[i,j]=A[j,i] chnh l chiu di dy in ni lin gia hai phng i v j.
- A[i,j] = A[j,i] = 0 nu i khng ni lin vi j.
Hy lp trnh tnh di cu dy dn cn s dng sao cho c n phng iu c
in v s lng ny l t nht.
D liu vo: cho trong file Bai8.inp ( th cho lin thng).
- Dng u ghi s n l s nh ca mt th (0<n<100)
Dng i+1 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: lu trong file Bai8.out vi ni dung sau:
- Dng u lu di dy dn nh nht
- Cc dng cn li lu ng i cn ni in gia nh i ni vi nh j c
trng s A[i,j] (i -> j = A[i][j]).
-
V d:
Bai8.inp
Bai8.out
5
03322
30232
32014
23104
22440
7
1 -> 4 = 2
4 -> 3 = 1
1 -> 5 = 2
3 -> 2 = 2
Bai8.inp
8
02340000
20304000
33076520
40700030
04600408
00504016
00230105
00008650
Bai8.out
20
1 -> 2 = 2
1 -> 3 = 3
3 -> 7 = 2
7 -> 6 = 1
7 -> 4 = 3
2 -> 5 = 4
7 -> 8 = 5
Trang 9
BI TON 9
C n thnh ph c nh s t 1 n n. Mng li giao thng gia cc thnh ph l
ng hai chiu. Trn ng i t thnh ph i n thnh ph j, ngi ta khng c
mang qu A[i,j] n v hng. Nu khng c ng i t thnh ph i n thnh ph j
th xem nh A[i,j] = 0. Cn vn chuyn hng t thnh ph D n thnh ph C. Hy
thit lp k hoch vn chuyn sao cho khi lng hng vn chuyn l nhiu nht.
D liu vo: th lin thng v cho trong file Bai9.inp vi ni dung
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng th hai lu nh D v nh C.
- Dng i+2 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: xut ra mn hnh k hoch vn chuyn t nh D n C v gi tr ng
i ngn nht tm c.
V d:
Bai9.inp
Kt qu:
6
16
012000
102230
220540
025032
034304
000240
Bai9.inp
Kt qu:
6
16
014000
102650
420730
067001
053003
000130
Trang 10
BI TON 10
C n thnh ph bit rng ng i gia cc thnh ph l ng i hai chiu. S
mng li giao thng ca n thnh ph cho bi ma trn A[i,j] trong :
- A[i,j] l di ng i t thnh ph i n thnh ph j.
- A[i,j] = 0 nu khng c ng i t thnh ph i n thnh ph j.
- A[i,j] = A[j,i].
- A[i,j] nguyn, khng m.
Hy xc nh ng i di nht t thnh ph D n thnh ph C vi iu kin thnh
ph qua khng c i li.
D liu vo: th lin thng v cho trong file Bai10.inp
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng th hai lu nh D v nh C.
- Dng i+2 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: xut ra mn hnh ng i di nht t nh D n C v gi tr ng i
ngn nht tm c.
V d:
Bai10.inp
Kt qu:
16
1->2->4->3->5->6
012000
102230
220540
025032
034304
000240
Bai10.inp
Kt qu:
16
014000
102650
420730
067001
053003
000130
1->3->4->2->5->6
Trang 11
HNG DN CI T BI TON
BI TON 1
Vit chng trnh tm bc cao nht ca nh trong th vi th v hng A[i,j]
vi A[i,j]=1 nu c ng i t i n j v ngc li A[i,j] = 0 nu khng c ng i
t i n j.
D liu vo: cho trong file Bai1.inp
- Dng u ghi s n l s nh ca mt th (0<n<100).
- Dng i+1 ( 1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: thng bo kt qu ra mn hnh s bc cao nht ca nh trong th cho.
V d:
Bai1.inp
Kt qu:
6
011000
100110
100010
010010
011101
000010
Bai1.inp
Kt qu:
5
01001
10111
01001
01001
11110
Yu cu x l:
f) Tm nh c bc cao nht.
g) Tm bc nh nht ca nh.
h) Tm nh c bc nh nht.
i) Tnh tng bc ca th.
j) m s nh bc chn v bc l.
V d:
Kt qu:
f) nh 2,5.
g) Bc 2.
h) nh 1,3,4.
i) Tng bc ca th 14.
S nh bc chn 5, s nh bc l 0.
Trang 12
Trang 13
Trang 14
Trang 15
Trang 16
BI TON 2
Vit chng trnh kim tra tnh lin thng ca mt th v hng A[i,j] vi A[i,j]=1
nu c ng i t i n j v ngc li A[i,j] = 0 nu khng c ng i t i n j.
D liu vo: cho trong file Bai2.inp
- Dng u ghi s n l s nh ca mt th (0<n<100).
- Dng i+1 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: thng bo kt qu ra mn hnh DO THI LIEN THONG hay DO THI KHONG
LIEN THONG.
V d:
Bai2.inp
Kt qu:
5
00001
00100
01010
00101
10010
Bai2.inp
Kt qu:
8
01000100
10100000
01010000
00101000
00010100
10001010
00000101
00000010
Bai2.inp
Kt qu:
6
011000
101000
110000
000011
000101
000110
Trang 17
Trang 18
Trang 19
BI TON 3
Vit chng trnh m s thnh phn lin thng ca th v hng Anxn vi:
- A[i,j] = 1 nu c ng i t i n j.
- A[i,j] = 0 nu khng c ng i t i n j.
- A[i,j] = A[j,i].
D liu vo: cho trong file Bai2.inp ni dung d liu ging d liu Bi Tp2.
D liu ra: hin th s thnh phn lin thng ca th ra mn hnh.
V d:
Bai3.inp
Kt qu:
6
011000
101000
110000
000011
000101
000110
Bai3.inp
Kt qu:
5
00001
00100
01010
00101
10010
Bai3.inp
8
01000100
10100000
01010000
00101000
00010100
10001010
00000101
00000010
Kt qu:
1
Trang 20
Ci t tng t nh bi ton 2.
CHNG TRNH MU
/*Hm tr v s thnh phn lin thng ca th v hng */
int TPLien_Thong(int **A, int n) {
char*DanhDau = new char [n];
char ThanhCong;
int Dem=0, i,j, MLT=0;
for( i = 0; i<n; i++)
DanhDau[i] = 0;
do { j = 0;
while(DanhDau[j]==1)
j++;
DanhDau[j] = 1;
Dem++;
MLT++;
do {
ThanhCong =0;
for(i = 0; i<n; i++)
if(DanhDau[i]==1)
for(j = 0; j<n; j++)
if (DanhDau[j] == 0 && A[i][j] > 0) {
DanhDau[j] = 1;
ThanhCong =1;
Dem++;
if(Dem == n) return MLT;
}
}while (ThanhCong == 1);
} while(Dem<n);
return MLT;
}
Trang 21
BI TON 4
C n thnh ph bit rng ng i gia hai cc thnh ph (nu c) l ng i hai
chiu. S mng li giao thng ca n thnh ph cho bi ma trn Anxn trong :
d. A[i,j] = 1 nu c ng i t thnh ph i n thnh ph j.
e. A[i,j] = 0 nu khng c ng i t thnh ph i n thnh ph j.
f. A[i,j] = A[j,i].
Hy xc nh mi ng t thnh ph D n thnh ph C (nu c).
D liu vo: th lin thng v cho trong file Bai4.inp
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng th hai lu nh D v nh C
- Dng i+2 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: Xut ra mn hnh mi ng i t nh D n C hay thng bo khng tn
ti ng i t D n C.
V d:
Bai4.inp
Kt qu:
5
15
01001
10110
01010
01101
10010
1->2->3->4->5
1->2->4->5
1->5
Bai3.inp
Kt qu:
5
15
01011
10101
01010
10101
11010
1->2->3->4->5
1->2->5
1->4->3->2->5
1->4->5
1->5
Bai4.inp
Kt qu:
6
14
011000
101000
110000
000011
000101
000110
Trang 22
Trang 23
//nh du nh u tin
//Lu li nh u tin l nh xut pht
}
void InDuongDi(int SoCanh) {
Dem++;
cout<<endl<<D+1;
for (int i = 1; i<SoCanh; i++)
cout<<" -> "<<L[i]+1;
}
/*Th tc quy tm kim ng i*/
void TimKiem(int SoCanh) {
if(L[SoCanh-1] == C) InDuongDi(SoCanh);
else {
for(int i = 0; i<n; i++)
if( A[L[SoCanh-1]][i]>0 && DanhDau[i] == 0){
L[SoCanh] = i;
DanhDau[i] = 1;
TimKiem(SoCanh+1);
//Tm kim nh tip theo
L[SoCanh] = 0;
DanhDau[i] = 0;
}
}
}
/*Chng trnh chnh*/
void main() {
clrscr();
Doc_File();
KhoiTao();
cout<<"Duong di tu "<<D+1<<" den "<<C+1;
TimKiem(1);
if(Dem==0)
cout<<" khong co";
delete*A,DanhDau,L;
getch();
}
Trang 24
BI TON 5
Mt li giao thng hai chiu gia n a im c cho bi ma trn A[i,j] trong
A[i,j]=1 nu c ng i t i n j, cn A[i,j] = 0 trong trng hp ngc li. Mt
ngi a th cn i qua tt c cc con ng ny pht th, mi ng ch qua
mt ln. Hy xc nh mt l trnh ca ngi a th ny (c th tn ti nhiu l
trnh khc nhau) hay thng bo khng tn ti ng nh vy.
D liu vo: cho trong file Bai5.inp.
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng i+1 ( 1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: In ra mn hnh ng i ca ngi a th (nu c).
V d:
Bai5.inp
Kt qu:
5
01000
10111
01010
01101
01010
1->2->3->4->2->5->4
Bai5.inp
5
01000
10111
01011
01101
01110
Kt qu:
KHONG TON TAI DUONG DI
Bai5.inp
Kt qu:
5
01001
10110
01010
01101
10010
2->1->5->4->2->3->4
Trang 25
Trang 26
Trang 27
Trang 28
4->2->5->1->3->5->6->2
Trang 29
2. Trng hp th c 2 nh bc l trong c 2 nh bc 1.
X l tng t nh trng hp 1 nhng ta phi lu vt ng i i qua
trnh trng hp ng i sau khi xa th nh tng ng xut pht l nh c lp. C
nhiu cch lu vt, tm kim bng phng php quy l mt trong nhng cnh
lu vt hiu qu v n gin. Tuy nhin phc tp ca thut ton qu ln nn trong
thc t ngi ta ch s dng phng php ny.
3. K thut tm kim quy tm ng i Euler.
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define Filename "Bai5.inp"
/*Khai bo cc bin ton cc*/
int Dem = 0;
//m s ng i
int*L;
//Lu li nh i
int **A,n
int XuatPhat=0;
//nh xut pht tm kim l nh bc l nu th c nh bc l
int SoCanh=0;
//Lu s cnh ca th v ng i i qua tt c cc cnh
/*Dc file d liu v khi to ban u*/
void Doc_File(){
int BacDinh;
FILE*f = fopen(Filename,"rb");
fscanf(f,"%d",&n);
cout<<"Ma Tran Lien Ket Tuong Ung.\n"<<n<<endl;
*A = new int [n];
for(int i =0;i<n;i++) {
A[i] = new int [n];
BacDinh = 0;
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<A[i][j]<<" ";
Trang 30
BacDinh++;
}
if(BacDinh%2==1) XuatPhat = i;
SoCanh+=BacDinh;
cout<<endl;
}
fclose(f);
SoCanh = SoCanh/2;
L = new int [SoCanh+1];
L[0] = XuatPhat;
//Xut pht l nh bc l
}
/*Xut ng i tm c ra mn hnh*/
void InDuongDi() {
Dem++;
cout<<endl<<XuatPhat+1;
for (int i = 1; i<=SoCanh; i++)
cout<<" -> "<<L[i]+1;
}
/*Th tc tm kim quy*/
void TimKiem(int Canh) {
/*Tm cho n khi cnh tm c ln hn s cnh ca th mi xut ng i*/
if(Canh > SoCanh && Dem ==0 ) InDuongDi();
else {
for(int i = 0; i<n; i++)
if( A[L[Canh-1]][i]>0 && Dem==0){
L[Canh] = i;
A[L[Canh-1]][i]=A[i][L[Canh-1]]=0;
//Xa cnh
TimKiem(Canh+1);
//Tm nh tip theo
A[L[Canh-1]][i]=A[i][L[Canh-1]]=1;
//Phc hi cnh
L[Canh] = 0;
}
}
}
void main() {
Doc_File();
cout<<"\nDUONG DI";
TimKiem(1);
if(Dem==0)
cout<<" KHONG CO";
delete*A,L;
getch();
}
Bin Son: o Anh Pha
Trang 31
BI TON 6
Mt ngi khch du lch mun i thm n thnh ph c nh s t 1 n n, mi
thnh ph ngi khch ch mun i qua chng mt ln. Mng li giao thng gia n
thnh ph l hai chiu v c cho bi ma trn A[i,j] trong A[i,j] =1 nu c
ng i gia thnh ph i v thnh ph j, A[i,j] = 0 trong trng hp ngc li.
Hy vit chng trnh thit lp cho ngi khch mt l trnh (c th tn ti
nhiu l trnh) hay thng bo khng tn ti l trnh theo yu cu ca khch.
D liu vo: cho trong file Bai6.inp
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng 2 ghi nh m ngi khch du lch xut pht.
- Dng i+1 ( 1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: In ra mn hnh ng i ca ngi khch (nu c).
V d:
Bai6.inp
Kt qu:
5
1
01000
10111
01010
01101
01010
1->2->3->4->5
Bai6.inp
Kt qu:
6
1
011000
101010
110001
000010
010100
001000
Bai6.inp
Kt qu:
5
2
01011
10101
01010
10101
11010
2->1->5->4->3
Trang 32
Bai6.inp
Kt qu:
6
1
011000
101000
110000
000011
000101
000110
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define FileIn "Bai6.inp"
int Dem = 0;
//Dm s ng i
int*L;
//Lu li ng i
char*DanhDau;
//Dnh du nh i
int **A,n,D;
/*Dc file d liu bi ton*/
void Doc_File() {
FILE*f = fopen(FileIn,"rb");
fscanf(f,"%d%d",&n,&D);
cout<<"Ma Tran Lien Ket Tuong Ung.\n"<<D<<endl;
*A = new int [n];
for(int i =0;i<n;i++) {
A[i] = new int [n];
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<A[i][j]<<" ";
}
cout<<endl;
}
fclose(f);
D--;
}
/*Khi to d liu ban u cho bi ton*/
void KhoiTao() {
Bin Son: o Anh Pha
Trang 33
Trang 34
BI TON 7
C n thnh ph bit rng ng i gia cc thnh ph (nu c) l ng i hai
chiu. S mng li giao thng ca n thnh ph cho bi ma trn A[i,j] trong :
- A[i,j] l di ng i t thnh ph i n thnh ph j.
- A[i,j] = 0 nu khng c ng i t thnh ph i n thnh ph j.
- A[i,j] = A[j,i]
- A[i,j] nguyn, khng m.
Hy xc nh ng i ngn nht t thnh ph D n thnh ph C.
D liu vo: th lin thng v cho trong file Bai7.inp vi ni dung
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng th hai lu nh D v nh C.
- Dng i+2 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: xut ra mn hnh ng i ngn nht t nh D n C v gi tr ng i
ngn nht tm c.
V d:
Bai7.inp
Kt qu:
6
16
012000
102230
220540
025032
034304
000240
Bai7.inp
Kt qu:
6
16
014000
102650
420730
067001
053003
000130
1->2->4->6
Trang 35
CHNG TRNH MU
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <values.h>
#define FileIn "Bai7.inp"
/*c file d liu bi ton*/
void Doc_File(int**A, int &n, int &D, int &C){
FILE*f = fopen(FileIn,"rb");
fscanf(f,"%d%d%d",&n,&D,&C);
cout<<"Ma Tran Lien Ket Tuong Ung.\n"<<D<<" "<<C<<endl;
*A = new int [n];
for(int i =0;i<n;i++) {
A[i] = new int [n];
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<A[i][j]<<" ";
}
cout<<endl;
}
fclose(f);
D--; C--;
}
/*Thut ton Dijkstra tm ng i ngn nht t nh D n nh C*/
void Dijkstra(int **A, int n, int D, int C) {
char *DanhDau = new char[n];
int *Nhan = new int[n];
int *Truoc = new int[n];
int XP, min;
for(int i=0; i<n; i++){
Nhan[i] = MAXINT;
DanhDau[i] = 0;
Truoc[i] = D;
}
Bin Son: o Anh Pha
Trang 36
Trang 37
BI TON 8
Mt cng ty cn thay ton b h thng dy in cho n phng lm vic. Cho bit s
in hin c ca n cn phng ny c biu din bng ma trn A[i,j] trong :
- A[i,j]=A[j,i] chnh l chiu di dy in ni lin gia hai phng i v j.
- A[i,j] = A[j,i] = 0 nu i khng ni lin vi j.
Hy lp trnh tnh di cu dy dn cn s dng sao cho c n phng iu c
in v s lng ny l t nht.
Ch : th cho l lin thng.
D liu vo: cho trong file Bai8.inp ( th cho lin thng).
- Dng u ghi s n l s nh ca mt th (0<n<100)
Dng i+1 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: lu trong file Bai8.out vi ni dung sau:
- Dng u lu di dy dn nh nht
- Cc dng cn li lu ng i cn ni in gia nh i ni vi nh j c
trng s A[i,j] (i -> j = A[i][j]).
-
Bai8.inp
Bai8.out
5
03322
30238
32014
23104
28440
7
43
32
41
15
Bai8.inp
Bai8.out
8
02340000
20304000
33076520
40700030
04600408
00504016
00230105
00008650
20
1-2
1-3
3-7
7-6
7-4
2-5
7-8
Trang 38
Trang 39
if(D[i]==Temp) D[i]=D[j]
Tng s cnh tm c ln 1 (Dem++).
Bc 2: Nu Dem = n-1 th thut ton kt thc.
Ch : trong qua trnh tm c th to thnh rt nhiu cy nhng kt qu tm c
cui cng l mt cy thng qua qu trnh ghp cy.
CHNG TRNH MU
1) Thut ton Prim tm cy ph ti tiu.
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <values.h>
#define FileInt "Bai8.inp"
#define FileOut "Bai8.out"
/*Lu li nhng cnh i qua x->y*/
typedef struct Egde {
int x,y;
};
/*Doc d liu t file*/
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<n;i++) {
A[i] = new int [n];
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
}
}
fclose(f);
}
/*Ghi d liu ra file*/
void Ghi_File(Egde*L,int n,int Sum) {
FILE*f = fopen(FileOut,"wb");
fprintf(f,"%d\n",Sum);
for(int i =0; i<n-1; i++)
fprintf(f,"%d - %d\n",L[i].x+1,L[i].y+1);
fclose(f);
}
/*Thut ton Prim*/
Trang 40
Trang 41
Trang 42
BI TON 9
C n thnh ph c nh s t 1 n n. Mng li giao thng gia cc thnh ph l
ng hai chiu. Trn ng i (nu c) t thnh ph i n thnh ph j, ngi ta
khng c mang qu A[i,j] n v hng. Nu khng c ng i t thnh ph i n
thnh ph j th xem nh A[i,j] = 0. Cn vn chuyn hng t thnh ph D n thnh
ph C. Hy thit lp k hoch vn chuyn sao cho khi lng hng vn chuyn l
nhiu nht.
D liu vo: th lin thng v cho trong file Bai9.inp vi ni dung
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng th hai lu nh D v nh C.
- Dng i+2 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: xut ra mn hnh k hoch vn chuyn t nh D n C v gi tr ng
i ngn nht tm c.
V d:
Bai9.inp
Kt qu:
6
16
012000
102230
220540
025032
034304
000240
1->3->4->6
Bai9.inp
Kt qu:
6
16
014000
102650
420730
067001
053003
000130
1->3->4->2->5->6
Trang 43
Tt c cc nh cha c nh du
Trc mi nh l nh u.
nh du nh xut pht.
Khi to:
nh
Nhn
nh du 1*
Trc
Bin Son: o Anh Pha
Trang 44
Nhn
nh du 1*
Trc
-
Nhn
nh du
1*
Trc
Nhn
nh du
1*
Trc
Nhn
nh du
1*
Trc
Nhn
nh du
1*
Trc
Trang 45
CHNG TRNH MU
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <values.h>
#define FileIn "Bai9.inp"
/*Dc file d liu ca bi tan*/
void Doc_File(int**A, int &n, int &D, int &C){
FILE*f = fopen(FileIn,"rb");
fscanf(f,"%d%d%d",&n,&D,&C);
cout<<"Ma Tran Lien Ket Tuong Ung.\n";
cout<<D<<" "<<C<<endl;
*A = new int [n];
for(int i =0;i<n;i++) {
A[i] = new int [n];
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<A[i][j]<<" ";
}
cout<<endl;
}
fclose(f);
D--;
C--;
}
/*Th tc tm ng i vn chuyn hng nhiu nht*/
void VanChuyen(int **A, int n, int D, int C) {
char *DanhDau = new char[n];
int *Nhan = new int[n];
int *Truoc = new int[n];
int XP, min,max;
for(int i=0; i<n; i++){
Nhan[i] = MAXINT;
DanhDau[i] = 0;
Truoc[i] = D;
}
DanhDau[D] = 1;
XP = D;
while(XP != C){
for(int j=0; j<n; j++)
if(A[XP][j]>0&&DanhDau[j]==0){
Trang 46
Trang 47
BI TON 10
C n thnh ph bit rng ng i gia cc thnh ph l ng i hai chiu. S
mng li giao thng ca n thnh ph cho bi ma trn A[i,j] trong :
- A[i,j] l di ng i t thnh ph i n thnh ph j.
- A[i,j] = 0 nu khng c ng i t thnh ph i n thnh ph j.
- A[i,j] = A[j,i]
- A[i,j] nguyn, khng m.
Hy xc nh ng i di nht t thnh ph D n thnh ph C vi iu kin thnh
ph qua khng c i li.
D liu vo: th lin thng v cho trong file Bai10.inp
- Dng u ghi s n l s nh ca mt th (0<n<100)
- Dng th hai lu nh D v nh C.
- Dng i+2 (1 i n ) cha n s A[i,1],A[i,2]A[i,n] mi s cch nhau bi
mt khong trng.
D liu ra: xut ra mn hnh ng i di nht t nh D n C v gi tr ng i
ngn nht tm c.
V d:
Bai10.inp
6
16
012000
102230
220540
025032
034304
000240
Kt qu:
DUONG DI DAI NHAT LA: 16
1->2->4->3->5->6
Bai10.inp
6
16
014000
102650
420730
067001
053003
000130
Kt qu:
DUONG DI DAI NHAT LA: 25
1->3->4->2->5->6
Trang 48
HNG DN CI T
S dng k thut ci t tm kim theo phng php quy, khi tm c 1
phng n th lu li trng thi ca phng n ban u v so snh vi phng n
mi tm c, nu phng n mi tt hn th chn phng n mi.
CHNG TRNH MU
include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define Filename "Bai10.inp"
/*Khai bo cc bin ton cc*/
int*L,*L1;
//Luu lai duong da di
char*DanhDau;
//Danh dau dinh da di
int **A,n,D,C,Tong,Tong1,Canh1;
/*Dc file d liu ca bi ton*/
void Doc_File() {
FILE*f = fopen(Filename,"rb");
fscanf(f,"%d%d%d",&n,&D,&C);
cout<<"Ma Tran Lien Ket Tuong Ung.\n"<<D<<" "<<C<<endl;
*A = new int [n];
for(int i =0;i<n;i++) {
A[i] = new int [n];
for(int j =0;j<n;j++) {
fscanf(f,"%d",&A[i][j]);
cout<<A[i][j]<<" ";
}
cout<<endl;
}
fclose(f);
D--; C--;
}
/*Khi to ban u cho th tc tm kim*/
void KhoiTao() {
DanhDau = new char [n];
L = new int [n];
//Lu ng i tm c
L1 = new int [n];
//Lu ng i ln nht
for (int i = 0; i<n; i++) {
DanhDau[i] = 0;
//Cc nh cha c nh du
L[i] = 0;
}
DanhDau[D] = 1;
//Dnh du nh xut pht
L[0] = D;
//ng i u tin qua nh u
Bin Son: o Anh Pha
Trang 49
//Trong s ng i
//Lu li trng s ln nht ca ng i
}
/*In ng i di nht tm c*/
void InDuongDi() {
cout<<"\nDUONG DI DAI NHAT:"<<Tong1<<endl<<D+1;
for (int i = 1; i<Canh1; i++)
cout<<" -> "<<L1[i]+1;
}
/*X l ly phng n tt hn*/
void XuLy(int Canh) {
if(Tong>Tong1){
Tong1 = Tong;
//Lu li trng s tt hn
Canh1 = Canh;
//Lu li s cnh i qua
for(int i =0; i<Canh; i++)
L1[i] = L[i];
//Lu li ng i tt hn
}
}
/*Th tc tm kim quy*/
void TimKiem(int SoCanh) {
if(L[SoCanh-1] == C) XuLy(SoCanh);
else { for(int i = 0; i<n; i++)
if( A[L[SoCanh-1]][i]>0 && DanhDau[i] == 0){
L[SoCanh] = i;
DanhDau[i] = 1;
Tong+=A[L[SoCanh-1]][i];
TimKiem(SoCanh+1);
L[SoCanh] = 0;
Tong-=A[L[SoCanh-1]][i];
DanhDau[i] = 0;
}
}
}
void main() {
Doc_File();
KhoiTao();
TimKiem(1);
if(Tong1==0) cout<<"\NKHONG CO DUONG DI";
else InDuongDi();
delete*A,DanhDau,L;
getch();
}
Bin Son: o Anh Pha
Trang 50
THUT TON
[] Kim tra tnh lin thng ca th ..............................................................................
[] m s thnh phn lin thng ca th ....................................................................
[] Thut ton tm mi ng i t nh D n nh C ....................................................
[] Thut ton tm mt ng i Euler..............................................................................
[] Thut ton tm mt ng i Hamilton .......................................................................
[] Thut ton Dijkstra tm ng i ngn nht................................................................
[] Thut ton Prim tm cy ph ti tiu ...........................................................................
[] Thut ton Kruskal tm cy ph ti tiu ......................................................................
[] Thut ton quy tm mi ng i Euler..................................................................
[] Thut ton quy tm mi ng i Hamilton ...........................................................
[] Thut ton ton kh quy tm mi ng i Euler...................................................
[] Thut ton ton kh quy tm mi ng i Hamilton ............................................
Trang 51