1. Trang chủ
  2. » Giáo án - Bài giảng

Thực hành lý thuyết đồ thị

92 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thực Hành Lý Thuyết Đồ Thị
Trường học Hutech University
Chuyên ngành Computer Science
Thể loại Essay
Năm xuất bản 2023
Thành phố Ho Chi Minh City
Định dạng
Số trang 92
Dung lượng 3,85 MB

Nội dung

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 1

Biên

www.hutech.edu.vn

Trang 2

*1.2023.cmp3014*

tailieuhoctap@hutech.edu.vn

Trang 3

I 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 13

C: 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 14

if (g.a[i][j] != g.a[j][i]) return 0;

Trang 15

printf("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 19

5

4

6

Trang 22

}

}

}

XetLienThong void XetLienThong(DOTHI g) {

Trang 23

printf("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 30

và quay lui

Trang 31

Euler và chu trình Euler

Trang 32

26 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 33

int 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 34

BÀI 2: 29

Euler Euler

Euler timDuongDiEuler

int timDuongDiEuler (DOTHI g) {

TimDuongDi(x, temp, stack);

Trang 35

2.5 NG D

Euler Euler

Euler timDuongDiEuler

int timDuongDiEuler (DOTHI g) {

TimDuongDi(x, temp, stack);

Trang 36

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) return 0;

Trang 39

Breadth First Search)

3.2 THU T TOÁN TÌM KI M THEO CHI U SÂU DFS

- DEPTH FIRST SEARCH

Trang 41

1

2

Trang 42

36 BÀI 3:

3

4

Trang 43

5

6

Trang 44

38 BÀI 3:

7

8

Trang 46

int ChuaXet[MAX];

Trang 47

void DFS(int v, GRAPH g) {

Trang 48

42 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 49

duyettheoDFS(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 51

1

2

Trang 52

46 BÀI 3:

3

Trang 53

4

5

Trang 54

48 BÀI 3:

6

7

Trang 56

50 BÀI 3:

(Finish)

F

i int LuuVet[MAX];

}

DayGiaTriVaoQueue int DayGiaTriVaoQueue(QUEUE &Q,int value) {

Trang 57

LayGiaTriRaKhoiQueue int LayGiaTriRaKhoiQueue(QUEUE &Q,int &value) {

int value = Q.array[0];

for (int i = 0; i < Q.size-1; i++)

DayGiaTriVaoQueue(Q,u);

Trang 58

52 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 59

Code trong hàm main

int nhapDinh(DOTHI & g, const char * tb) {

Trang 61

4.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 64

58 BÀI 4:

Trang 65

Chú ý:

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 66

typedef struct EDGE {

if (ChuaXet[j] == 0 && g.a[i][j] != 0 &&

GiaTriNhoNhat > g.a[i][j]) {

Trang 67

CanhNhoNhat.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 68

62 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 73

while(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 75

5.2 THU T TOÁN DIJKSTRA

Trang 78

72 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 82

Code trong hàm main

5.4 THU T TOÁN FLOYD

sau:

Trang 84

-78 BÀI 5:

Hình 5.2:

Trang 86

80 BÀI 5:

Trang 88

82 BÀI 5:

Trang 89

} else { /*

Sau_Nut[i][j] = -1;

Trang 90

84 BÀI 5: CÁC

/*

L[i][j] = VOCUC;

} }

}

> F int S, F;

printf ("Nhap vao dinh bat dau: ");

Ngày đăng: 06/02/2024, 10:01

HÌNH ẢNH LIÊN QUAN

Hình 2.1:  Euler - Thực hành lý thuyết đồ thị
Hình 2.1 Euler (Trang 24)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w