và quay lui... Euler và chu trình Euler... BÀI 2: 29Euler Euler Euler timDuongDiEuler int timDuongDiEuler DOTHI g { TimDuongDix, temp, stack;... 2.5 NG DEuler Euler Euler timDuongDiEul
Trang 1Biên
www.hutech.edu.vn
Trang 2*1.2023.cmp3014*
tailieuhoctap@hutech.edu.vn
Trang 3I II
1
1.1 1
1.2 2
1.3 2
1.4 4
1.5 9
1.6 10
1.7 15
18
2.1 18
2.2 20
2.3 22
2.4 25
2.5 29
BÀI 3: 32
3.1 32
3.2 - DEPTH FIRST SEARCH 33
3.3 40
3.4 43
3.5 49
BÀI 4: 54
4.1 54
4.2 55
4.3 56
4.4 59
4.5 61
4.6 64
4.7 66
68
5.1 68
5.2 DIJKSTRA 69
5.3 DIJKSTRA 74
5.4 76
5.5 FLOYD 83
86
Trang 5- (5 chuyên c n và m tích c c
Trang 13C: C:/test.txt
TenFile int DocMaTranKe(const char TenFile[], DOTHI &g) {
void XuatMaTranKe (DOTHI g) {
printf("So dinh cua do thi la %d\n", g.n);
printf("Ma tran ke cua do thi la:\n");
for (int i = 0; i < g.n; i++) {
printf ("\t");
for (int j = 0; j < g.n; j++)
printf("%4d ",g.a[i][j]);
Trang 14if (g.a[i][j] != g.a[j][i]) return 0;
Trang 15printf("Doc thong tin do thi tu file thanh cong.\n\n");
XuatMaTranKe(g);
printf("Do thi co ma tran ke: %s\n",
KiemTraMaTranKeHopLe(g) == 1 ? "hop le" : "khong hop le"); printf("Do thi thuoc dang: %s\n",
KiemTraDoThiVoHuong(g) == 1? "vo huong" : "co huong");
Trang 195
4
6
Trang 22}
}
}
XetLienThong void XetLienThong(DOTHI g) {
Trang 23printf("Thanh phan lien thong thu [%d] gom cac dinh: ", i);
// nhap duong dan va ten tap tin ma tran ke chua du lieu do thi
printf("Nhap ten tap tin du lieu do thi: ");
scanf("%s", inputfile);
printf("Da doc thanh cong du lieu do thi.\n\n");
Trang 27-
Euler Euler
Hình 2.3:
Euler là (1,2,4,5,7,8,Euler là (1,2,3,6,8,7,5,4,3,1)
Trang 30và quay lui
Trang 31Euler và chu trình Euler
Trang 3226 BÀI 2: VÀ CHU TRÌNH EULER
chu trình Euler:
struct STACK {
Euler int array[100];
};
khoitaoStack void khoitaoStack (STACK &stack) {
stack.size = 0;
}
DayGiaTriVaoStack void DayGiaTriVaoStack (STACK &stack, int value) {
Trang 33int bacDinh(DOTHI & g, int v) {
TimDuongDi(x, temp, stack);
for (int i = 0; i < temp.n; i++)
for (int j = 0; j < temp.n; j++)
if (temp.a[i][j] != 0 || temp.a[j][i] != 0)
Trang 34BÀI 2: 29
Euler Euler
Euler timDuongDiEuler
int timDuongDiEuler (DOTHI g) {
TimDuongDi(x, temp, stack);
Trang 352.5 NG D
Euler Euler
Euler timDuongDiEuler
int timDuongDiEuler (DOTHI g) {
TimDuongDi(x, temp, stack);
Trang 36for (int i = 0; i < temp.n; i++)
for (int j = 0; j < temp.n; j++)
if (temp.a[i][j] != 0 || temp.a[j][i] != 0) return 0;
Trang 39Breadth First Search)
3.2 THU T TOÁN TÌM KI M THEO CHI U SÂU DFS
- DEPTH FIRST SEARCH
Trang 411
2
Trang 4236 BÀI 3:
3
4
Trang 435
6
Trang 4438 BÀI 3:
7
8
Trang 46int ChuaXet[MAX];
Trang 47void DFS(int v, GRAPH g) {
Trang 4842 BÀI 3:
else
printf("Khong co duong di tu dinh [%d] den dinh [%d] \n",S,F); }
Code trong hàm main
int nhapDinh(DOTHI & g, const char * tb) {
Trang 49duyettheoDFS(s, f, g);
}
return 0;
}
3.4 THU T TOÁN TÌM KI M THEO CHI U R NG
BFS (BREADTH FIRST SEARCH)
Trang 511
2
Trang 5246 BÀI 3:
3
Trang 534
5
Trang 5448 BÀI 3:
6
7
Trang 5650 BÀI 3:
(Finish)
F
i int LuuVet[MAX];
}
DayGiaTriVaoQueue int DayGiaTriVaoQueue(QUEUE &Q,int value) {
Trang 57LayGiaTriRaKhoiQueue int LayGiaTriRaKhoiQueue(QUEUE &Q,int &value) {
int value = Q.array[0];
for (int i = 0; i < Q.size-1; i++)
DayGiaTriVaoQueue(Q,u);
Trang 5852 BÀI 3:
if (LuuVet[u] == -1) LuuVet[u] = v;
} }
}
}
BFS void duyettheoBFS (int S, int F, GRAPH g) {
ChuaXet for (int i = 0; i < g.n; i++) {
Trang 59Code trong hàm main
int nhapDinh(DOTHI & g, const char * tb) {
Trang 614.2 CÂY KHUNG NH NH T
X
M i c nh e b t k c a G có tr ng s là c(e) Gi s T = (XT, ET) là cây khung c a
Trang 6458 BÀI 4:
Trang 65Chú ý:
xét tính liên thôngnhiên, ta
int soTPLienThong(DOTHI & g) {
int SoTPLT = 0, nhan[MAX];
for (int i = 0; i < g.n;i++) nhan[i] = 0;
for (int i = 0; i < g.n; i++)
if (nhan[i] == 0) {
SoTPLT ++;
Trang 66typedef struct EDGE {
if (ChuaXet[j] == 0 && g.a[i][j] != 0 &&
GiaTriNhoNhat > g.a[i][j]) {
Trang 67CanhNhoNhat.u = i; CanhNhoNhat.v = j;
CanhNhoNhat.value = g.a[i][j];
GiaTriNhoNhat = g.a[i][j];
} }
Code trong hàm main
4.5 THU T TOÁN KRUSKAL
{e}
Trang 6862 BÀI 4:
Hình 4.2:
Trang 72-66 BÀI 4:
KRUSKAL
không t
không liên thông
typedef struct canh { //
int u, v, value;
} CANH;
void SapXepTang(CANH E[100],int tongsocanh) {
for(int j = i + 1 ; j < tongsocanh ; j++)
if(E[i].value > E[j].value) { CANH tmp = E[i]; E[i] = E[j]; E[j] = tmp;
} }
void Kruskal (DOTHI g) {
listEdge[tongsocanh].v = j;
listEdge[tongsocanh].value = g.a[i][j];
tongsocanh++;
Trang 73while(nT < g.n && canhdangxet < tongsocanh) {
/*
CANH edge = listEdge[canhdangxet];
int u = nhan[edge.u], v = nhan[edge.v];
printf("\nDo thi khong lien thong \n");
Trang 755.2 THU T TOÁN DIJKSTRA
Trang 7872 BÀI 5:
Trang 81/*
if(DoDaiDuongDiToi[v] > DoDaiDuongDiToi[u] + g.a[u][v]) { DoDaiDuongDiToi[v] = DoDaiDuongDiToi[u] + g.a[u][v]; LuuVet[v] = u;
} }
}
Dijkstra
void Dijkstra (int S, int F, DOTHI g) {
//
for (int i = 0; i < g.n ; i++) {
ChuaXet[i] = 0;
Trang 82Code trong hàm main
5.4 THU T TOÁN FLOYD
sau:
Trang 84-78 BÀI 5:
Hình 5.2:
Trang 8680 BÀI 5:
Trang 8882 BÀI 5:
Trang 89} else { /*
Sau_Nut[i][j] = -1;
Trang 9084 BÀI 5: CÁC
/*
L[i][j] = VOCUC;
} }
}
> F int S, F;
printf ("Nhap vao dinh bat dau: ");