Tải bản đầy đủ (.doc) (30 trang)

NIÊN LUẬN DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (DFS)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (446.76 KB, 30 trang )

TRƯỜNG ĐẠI HỌC BẠC LIÊU
KHOA CÔNG NGHỆ THÔNG TIN


NIÊN LUẬN 1:

DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (DFS)
MSĐT: NL1 – TH045

Người ra đề:Th.s …………
Giáo Viên Hướng Dẫn:
…………

Sinh Viên Thực Hiện:
………..
MSSV: 1TH….

HỌC KỲ 2, 20…. –
20...


LỜI NÓI ĐẦU

Để hoàn thành niên luận này, bên cạnh sự nổ lực của bản thân cùng với sự kết
hợp những kiến thức đã được học, quá trình tìm hiểu và thu thập thông tin có liên
quan đến nội dung của đề tài niên luận. Mặt khác chúng em luôn nhận được sự giúp
đỡ và hướng dẫn của cô. Đã giúp em hoàn thành tốt niên luận này.
Với sự nổ lực hết mình, em đã cố gắng hoàn thành niên luận này trong suốt
thời gian qua. Do vốn hiểu biết còn hạn chế nên vẫn còn nhiều thiếu xót. Mong sự
góp ý kiến của cô để niên luận của em hoàn thiện hơn.
Em xin chân thành cảm ơn!




MẪU CHẤM NIÊN LUẬN
TÊN ĐỀ TÀI: DUYỆT ĐỒ THỊ THEO CHIỀU SÂU (DFS)
GIÁO VIÊN HƯỚNG DẪN: TRIỆU …..
CÁC SINH VIÊN THỰC HIỆN:
STT
1
2

HỌ TÊN
DIỆP …….

MÃ SỐ ĐỀ TÀI
NL1 – TH…

I. HÌNH THỨC: (tối đa 1, 0 điểm)
Bìa: (tối đa 0.5 điểm) ................................................................................................
Các tiêu đề:
Loại đồ án, Tên đề tài, Giáo viên hướng dẫn, Thông tin về sinh viên thực hiện,
Năm thực hiện.
Bố cục: (tối đa 0.5 điểm)
Trang nhận xét của GVHD và GV chấm. Mục lục: ( cấu trúc chương. Mục, tiểu
mục), Phụ lục: (nếu có), Tài liệu kham khảo.
II. NỘI DUNG: (tối đa 4.5 điểm)
II. 1 Giới thiệu (tối đa 0.5 điểm) ...............................................................................
Giới thiệu tổng quan
Mục tiêu cần đạt
II. 2 Lý thuyết: (tối đa 1 điểm) .................................................................................
Các khái niệm sử dụng trong đề tài:

Kết quả vận dụng lý thuyết vào đề tài:
II. 3 Ứng dụng: (tối đa 2.5 điểm) ..............................................................................
Kết quả/Lưu đồ
Giới thiệu chương trình
II. 4 Kết luận: (tối đa 0.5 điểm) ................................................................................
Nhận xét kết quả đạt được
Hạn chế


Hướng phát triển
III. CHƯƠNG TRÌNH ĐỀ MÔ: (tối đa 3.5 điểm) ...............................................
Giao diện
Hướng dẫn sử dụng
Kết quả thực hiện đúng với kết quả phần ứng dụng
IV. THƯỞNG: (tối đa 1.0 điểm) ............................................................................
TỔNG CỘNG: .........................................................
Bạc Liêu, ngày

tháng

GV CHẤM

năm 20…


Nhận Xét Của Giáo Viên Hướng Dẫn

................................................................................................................................................
................................................................................................................................................
................................................................................................................................................

................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................
................................................................................................................................................

Bạc Liêu, ngày

tháng

năm 2010.

Giáo viên hướng dẫn


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)


GVHD: Triệu ……

MỤC LỤC
MỤC LỤC.................................................................................................................................6
CHƯƠNG I: TỔNG QUAN......................................................................................................6
I. GIỚI THIỆU:......................................................................................................................6
II. MỤC TIÊU CẦN ĐẠT:....................................................................................................7
1. Về lý thuyết:..................................................................................................................7
2. Về chương trình Demo:................................................................................................7
III. HƯỚNG PHÁT TRIỂN:..................................................................................................7
1. Hướng phát triển:..........................................................................................................7
CHƯƠNG II: ỨNG DỤNG.......................................................................................................8
I. CƠ SỞ LÝ THUYẾT:........................................................................................................8
II. CÁC KHÁI NIỆM VÀ CHƯƠNG TRÌNH CON:............................................................8
2> Biểu diễn ma trận:......................................................................................................10
3> Đồ thị liên thông:.......................................................................................................11
4> Duyệt chiều sâu (DFS):.............................................................................................13
5> Ngoài ra còn sử dụng các hàm được định nghĩa sẵn trong C và trong đồ họa:.........15
III. MÔ HÌNH, LƯU ĐỒ, CHƯƠNG TRÌNH CON VÀ KẾT QUẢ ĐẠT ĐƯỢC:...........16
1.Mô hình của chương trình chính:.................................................................................16
2. Lưu đồ của một số chương trình:................................................................................17
CHƯƠNG 3: KẾT LUẬN VÀ ĐÁNH GIÁ............................................................................29
I. KẾT QUẢ ĐẠT ĐƯỢC:..................................................................................................29
II. HẠN CHẾ:......................................................................................................................29
III. HƯỚNG PHÁT TRIỂN:................................................................................................29
TÀI LIỆU THAM KHẢO........................................................................................................30

CHƯƠNG I: TỔNG QUAN
I. GIỚI THIỆU:

Ngày nay với sự phát triển mạnh mẽ của công nghệ, đặt biệt là ngành công
nghệ thông tin. Trong lĩnh vực này, nó cũng liên quan không ít đến môn cấu trúc dữ
liệu và giải thuật. Do đó, nó cũng là một phần quan trọng trong hệ thống thông tin.
Đối với cấu trúc dữ liệu thì nó cũng nghiên về phần lập trình. Nhưng ta thấy nó
cũng có phần vẽ về đồ thị dể thông dụng hơn nhiều vì có nó sẽ làm ta có nhiều ý
tưởng vẽ hơn. Do vậy, ta cũng có thể áp dụng phần vẽ đồ thị vào trong ngôn ngữ lập
trình bằng đồ hoạ vậy ta sẽ thấy đẹp mắt hơn. Nói tới đồ thị thì gồm có 2 dạng đó là

SVTH: Diệp ……………..

Trang 6


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

đồ thị có hướng và đồ thị vô hướng, biểu diễn đồ thị, các phép duyệt đồ thị.Và cũng
trong số đó thì cũng có liên quan tới một phần em làm đó là: “Duyệt đồ thị theo chiều
sâu”. Duyệt đồ thị theo chiều sâu là phải đi qua các đỉnh và các cạnh của đồ thị một
cách có hệ thống. Và nó cũng có thể duyệt chiều sâu theo một hướng sâu nhất để tìm
ra được kết quả chính xác hơn.
Đề tài này nói về mô hình hoá của đồ thị như: đọc File, vẽ đồ thị, in nội dung
nút của giải thuật DFS.
Để giải quyết các vấn đề trên, em quyết định dùng cấu trúc mảng.
II. MỤC TIÊU CẦN ĐẠT:
1. Về lý thuyết:
- Cần hiểu và nắm rõ các giải thuật duyệt đồ thị theo chiều sâu
trong cấu trúc dữ liệu và giải thuật.
- Nắm vững ngôn ngữ lập trình C nhằm giải quyết một cách hiệu

quả các vấn đề được đặt ra.
- Chương trình Demo phải dễ hiểu và dễ coi, đề tránh cho người
kham khảo không muốn xem.
2. Về chương trình Demo:
- Cung cấp giao diện thân thiện với người dùng.
- Cho phép nhập vào File, vẽ đồ thị bằng đồ hoạ, in nội dung nút
theo giải thuật DFS.
- Trong phần vẽ đồ thị em có sử dụng hàm thư viện con chuột để
vẽ.
III. HƯỚNG PHÁT TRIỂN:
1. Hướng phát triển:
Qua quá trình nghiên cứu thực hiện niên luận có thể tóm lược như sau:
1.1 Về cấu trúc dữ liệu:
- Dữ liệu đầu vào được nhập từ bàn phím.
- Dữ liệu đầu ra được ghi là File.
1.2 Về ngôn ngữ lập trình:

SVTH: Diệp ……………..

Trang 7


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

- Sau khi tìm hiểu và so sánh một số ngôn ngữ lập trình gồm: Pascal, C, C++
… em quyết định chọn ngôn ngữ lập trình C để cài đặt chương trình Demo với các lý
do sau:
+ C là ngôn ngữ lập trình khá linh động và phổ biến.

+ C hỗ trợ các thư viện đáp ứng được các hàm dùng để xử lý
thích hợp với đề tài của em.
+ Chọn cấu trúc danh sách để cài đặt.
+ Ngoài ra, C là ngôn ngữ thông dụng và được nhiều người sử
dụng đến.

CHƯƠNG II: ỨNG DỤNG
I. CƠ SỞ LÝ THUYẾT:
Lý thuyết đồ thị là lĩnh vực đã được nghiên cứu từ những năm đầu thế kỷ 18
bởi nhà toán học Leonhard Euler người Thụy Sĩ. Đồ thị được sử dụng đề giải quyết
nhiều bài toán thuộc các lĩnh vực khác nhau, trong tin học là một trường hợp cụ thể.
Có thể nói, lý thuyết đồ thị được ứng dụng rộng rãi trong tất cả lĩnh vực khác nhau.
II. CÁC KHÁI NIỆM VÀ CHƯƠNG TRÌNH CON:
1> Đồ thị: Là một cấu trúc dữ liệu rời rạc bao gồm các đỉnh và các cung nối
các cặp đỉnh này.

SVTH: Diệp ……………..

Trang 8


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

Hay đồ thị là cặp G=(V,E), trong đó V là đỉnh và E= { (x,y) | x,y ∈ E } là tập
cạnh. Đồ thị là tập hợp các đối tượng được biểu diễn bằng các đỉnh và giữa các đồi
tượng có một quan hệ biểu diễn bằng các cung.
Cũng có thể biểu diễn đồ thị bằng hình học: Trên mặt phẳng biểu diễn bằng
các điểm, biểu diễn các cung bằng một đoạn có chỉ rõ hướng của cung.

* Đồ thị gồm có: đồ thị vô hướng và đồ thị có hướng.
- Đồ thị có hướng được ký hiệu G=[X,U] được xác định bởi:
+ X được gọi là đỉnh của đồ thị. Nếu đồ thị có n đỉnh, tức [X] = n, thì đựoc
nói bậc đồ thị của n. Khi số phần tử của X là hữu hạn thị được gọi là đồ thị hữu hạn.
+ U gọi là cặp đỉnh có thứ tự u=(i,j), gọi là cung nối đỉnh i với j của đồ thị.
Đỉnh i được gọi là gốc, đỉnh j được gọi là nhọn, là hai đầu mút của cung u.
Bằng hình vẽ, các đỉnh của đồ thị có hướng được trình bày bằng các điểm, các
cung được trình bày bằng mũi tên nối từ đỉnh gốc tới đỉnh nhọn.

- Đồ thị vô

hướng được ký hiệu

G=[X,U] được xác định bởi:
+ X được gọi là đỉnh của đồ thị.
+ U gọi là cặp đỉnh không tính đến thứ tự u=(i,j), gọi là cạnh nối giữa đỉnh
i với j của đồ thị.
Bằng hình vẽ, các đỉnh của đồ thị vô hướng được trình bày bằng các điểm, các
cạnh được trình bày bằng đoạn thẳng nối 2 đỉnh.

SVTH: Diệp ……………..

Trang 9


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

2> Biểu diễn ma trận:

* Ma trận kề, ma trận có trọng số:
Xét đồ thị đơn vô hướng G=[V,E], với tập đỉnh V={ 1,2…n }, với tập cạnh
E={ e1,e2,…em }. Ta gọi ma trận kề của các phần tử bằng 0 hoặc bằng 1theo quy định
như sau:
A = { aij : aij = 1 nếu (i.j) ∈ Ej , aij = 0 nếu (i,j) ∉ E; I,j =1,2,…, n}.
Ví dụ1: Biểu diễn ma trận kề:

1
1
2
3
4
5
6

2

3

4

5

6

0 1 1 0 0 0 
1 0 1 1 0 0 


1 1 0 0 1 0 



0 1 0 0 1 1 
0 0 1 1 0 1 


0 0 1 1 0 1 

- Tính chất:
+ Ma trận kề của đồ thị vô hướng là đồ thị đối xứng A[i,j] = A[j,i]; i,j = 1,2,…
n. Ngược lại, mỗi (0,1) ma trận cấp n đẳng cấu với một đơn đồ thị vô hướng n đỉnh.
+ Tổng các phần tử theo dòng i (cột j) của ma trận kề chính bằng bậc đỉnh I
(đỉnh j).
+ Nếu ký hiệu ,i,j = 1,2,…,n là các phần tử của ma trận. Khi đó:
Ap = A.A… A (p lần); aijp , i, j = 1,2,…,n,
Ma trận kề của đồ thị có hướng cũng được định nghĩa tương tự, chỉ cần lưu ý tới
hướng của cạnh. Ma trận kề của đồ thị có hướng không đối xứng.
Ví dụ 1: Ma trận Kề của đồ thị có hướng.

1

SVTH: Diệp ……………..

2

3

4

1 0 1 1 0

2
0 0 0 1
3 0 0 0 1

4 0 0 0 0
5
1 0 0 0

5
0 
1 

0

10
0Trang

0



Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

Ví dụ 2: Ma trận Kề của đồ thị có trọng số.

1
1 0
2

3
3 7

4 0
5 0

6 0

2
3
0
6
6
0
0

3
7
6
0
0
3
0

4
0
6
0
0
8

5

5
0
0
3
8
0
9

6
0
0

0

5
9

0

* Giải thuật ma trận:
Void nhap()
{
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{ printf("G[%d][%d]=",i,j);
scanf("%d",&G[i][j]);
}
}

Void in()
{
for(int i=1;i<=n;i++)
{ for(int j=1;j<=n;j++)
printf("%3d",G[i][j]);
}
printf("\n");
}
3> Đồ thị liên thông:
- Đồ thị G được gọi là liên thông nếu mỗi cặp đỉnh i,j bất kì thì luôn tìm
được đường đi nối giữa i và j.
SVTH: Diệp ……………..

Trang 11


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

- Để xác định số thành phần liên thông của đồ thị, ta sử dụng biến solt để
ghi nhận các đỉnh cùng mmột thành phần liên thông trong mảng chuaxet[] như sau:
+ Nếu đỉnh i chưa được duyệt, chuaxet[i] có giá trị 0;
+ Nếu đỉnh i được duyệt thuộc thành phần thứ j=solt, ta ghi nhận
chuaxet[i]=solt;
+ Các đỉnh cùng thành phần liên thông nếu chúng có cùng giá trị trong
mảng chuaxet[].
* Giải thuật:
void KetQuaLienThong()
// Hien thi ket qua sau khi duyet do thi

{
unsigned i,j,solt,chuaxet[max];
if (solt == 1)
for (int i=1; i<=solt; i++)
{
printf("\n Thanh phan lien thong thu %d la :", i);
scanf("%d",&i);
if (chuaxet[j] == 1)
printf("\n");
}
}
void LienThong()
// Kiem tra tinh lien thong cua do thi
{
unsigned i,chuaxet[max],solt;
solt = 0;
for (i=0; iif (chuaxet[i] == 0)
{
solt++;
DFS(i);

SVTH: Diệp ……………..

Trang 12


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……


}
KetQuaLienThong();
}
Ví dụ 3: Đồ thị có 3 bộ phận liên thông.

4> Duyệt chiều sâu (DFS):
Giả sử ta có đồ thị G=(V,E) với các đỉnh ban đầu được đánh dấu la chưa duyệt.
Từ 1 đỉnh v nào đó ta bắt đầu duyệt như sau: Đánh dấu v đã duyệt, với mỗi đỉnh w
chưa duyệt kề với v, ta thực hiện quá trình trên cho w.
Để kiểm tra duyệt mỗi đỉnh, ta sử dụng một mảng chuaxet[] gồm n phần
tử(tương ứng với n đỉnh), nếu đỉnh thứ i đã được duyệt , phần tử tương ứng trong
mảng chuaxet[] co giá trị 0. Ngược lại, nếu đỉnh thứ i chưa được duyệt , phần tử
tương ứng trong mảng chuaxet[] có giá trị 1.
* Giải thuật:
void DFS(int v)
{
chuaxet[v]=0;
for(i=1;i<=n;i++)
if ((A[u][i]) && (chuaxet[i]))
DFS(u);
}
Thủ tục DFS() sẽ thăm tất cả các đỉnh cùng thành phần liên thông với v mỗi
đỉnh đúng một lần. Chúng ta cần thực hiện duyệt như sau:
{
for( i=1;i<=n;i++)
SVTH: Diệp ……………..

Trang 13



Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

chuaxet[i]=1; /* thiết lập giá trị ban đầu cho mảng chuaxet[]*/
DFS(u);
for(i=1;i<=n;i++)
if (chuaxet[i])
DFS(i);
}
Ví dụ 4:

Kết quả duyệt: ABFDCEG.
* Trong trường hợp viết văn bản chương trình cho DFS() thì ta sử dụng
giải thuật sau:
Void Init(int G[][max], int *n) /* để đọc dữ liệu từ tệp DFS.IN
{
FILE *fp; int i,j;
Fp = fopen(“DFS.IN”, “r”);
If(fp == NULL)
{
Printf(“ khong co file input”);
Return;

SVTH: Diệp ……………..

Trang 14



Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

}
fscanf(fp,”%d”,n);
for(i=1;i<=*n;i++)
{
for(j=1;j<=*n;j++)
fscanf(fp,”%d”,&G[i][j]);
printf(“%3d”,G[i][j]);
}
}
}
//* void DFS(int G[][max], int n, int v, int chuaxet[]{
int u;
printf(“%3d”,v); chuaxet[v] = 0;
for(u=1;u<=n;u++)
{
if (G[v][u]==1 && chuaxet[u])
DFS(G,n,u,chuaxet);
}
}
//* void main(void){
For(i=1;i<=n;i++)
Chuaxet[i] = 1;
For(i=1;i<=n;i++)
if (chuaxet[i])
DFS(G,n,I,chuaxet);
getch();

}
5> Ngoài ra còn sử dụng các hàm được định nghĩa sẵn trong C và trong đồ
họa:
a> Về C:
- FILE *fopen(const char *Path, const char * Mode)
SVTH: Diệp ……………..

Trang 15


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

Trong đó Path là tệp tin cần mở để ghi hoặc đọc; Mode là chuỗi cách thức mà
tập tin sẽ mở.
- int fclose(FILE *f): f là con trỏ tập tin được mở bởi hàm fopen();
fclose được dùng để đóng tập tin được mở bởi hàm fopen(). Nếu đóng được tập tin thì
kết quả trả về là số 0, nếu không thì có lỗi xảy ra.
- fprintf(FILE *f, const char *format, varexpr)
Trong đó: format là chuỗi định dạng; varexpr danh sách các biểu thức, mỗi
biểu thức cách nhau dấu phẩy(,). Dùng để ghi dữ liệu có định dạng lên tập tin văn bản.
- fscanf(FILE *f, const char *format, varlist)
Trong đó: format là chuỗi định dạng; varlist danh sách các biến, mỗi biến cách
nhau dấu phẩy(,).Dùng để đọc dữ liệu từ tập tin văn bản.
- memset(char *Des, int c, size_t n): Dùng để đặt n kí tự đầu tiên cho
chuỗi là kí tự c.
b> Về đồ hoạ:
- initgraph( int *graphdrive, int *graphmode, char * Path)
Trong đó: graphdriver chứa trình điều khiển đồ họa; graphmode kiểu đồ họa;

Path đường dẫn đến thư mục chứa các drive đồ hoạ.
- circle(int x, int y, int r): Hàm vẽ đường tròn trên màn hình đồ họa có
tâm tại toạ độ(x,y) và có bán kính r.
- setlinestyle( int style, int pattern, int thickness): Để thiết lập dạng, mẩu
và bề dày của đường thẳng.
- outtextxy(int x, int y, char far * textstring): Hiển thị nội dung xâu
textstring tại toạ độ (x,y) trong màn hình đồ họa.
- setbkcolor(Mau): Thiết lập màu nền cho màn hình đồ họa.
- setcolor(Mau):Thiết lập màu nét.
BEGI
III. MÔ HÌNH, LƯU ĐỒ, CHƯƠNG
TRÌNH CON VÀ KẾT QUẢ ĐẠT ĐƯỢC:
N
1.Mô hình của chương trình chính:
NHẬP DỮ
LIỆU

Nhập ma trận, in ma
trận, thành phần liên
thông, DFS, …

MENU XỬ LÝ
SVTH: Diệp ……………..

Trang 16
END


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)


GVHD: Triệu ……

2. Lưu đồ của một số chương trình:
a> Creat_matrix:

BEGI
N
Nhập số phần tử
n
File *fp1=
fopen(“MTKe.txt”,”w”)
n
i=1

i <= n

S

Đ

Fclose(fp1)

j=i+1
j ++
G[i][j] = 0

S

END


j <= n
Đ
G[i][j]

SVTH: Diệp ……………..

Trang 17
G[i][j] = G[j][i]

j ++


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

b> in_matrix:

BEGI
N
File *fp2 = fopen(“MTK.txt”,”r”)

tp2 = =
null
Đ
n

i=1

i <= d


S

fClose(tp2)

END

Đ
j ++

SVTH: Diệp ……………..

j=1

j <= n

j ++

G [i] [j]

G [i] [j]
Trang 18


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

BEGI
N

c> DFS:

Nhập số phần tử
n

File *fp1 = fopen(“MTKe.in”,”r”)

n
u
Chuaxet[u] = 0

i=1

i <= n

S

Fclose(fp2)

Đ

END

j=1
S
j ++

j <= n
Đ
G[i][j]


S
A[u][i] &&
chuaxet[i]
SVTH: Diệp ……………..
Đ
DFS1 (i)

Trang 19
j ++


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

d> Duyệt DFS:

BEGI
N
i=1
S

i <= n

DFS (u)

Đ
i ++


i=1

Chuaxet (i) = 1

j <= n

EN
D

Đ
DFS (i)

SVTH: Diệp ……………..

i ++

Đ

chuaxet[i
]

Trang 20


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

f> Kết quả liên thông:


BEGI
N
S

n

solt = 1

Đ

Đồ thị liên thông

i=1

i <=
solt
Đ

S

EN
D

i
j=0

j <= n
j ++
S


S
chuaxet[j] ==
i

Đ

j+1

DFS (i)
SVTH: Diệp ……………..

i ++

Trang 21


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

e> liên thông:

BEGI
N
Meset (chuaxet, osizeof (chuaxet))
solt = 1
i=0

i <= n
i ++


Đ

S
Ketqualienthong

S
chuaxet[i] ==
0
Đ

Begin

solt ++

EN
D

Nhap dinh n
i++

DFS1 (i)
Nhap ma tran

f> chương trình chính:
In ma tran

DFS

Lien thong

SVTH: Diệp ……………..

Trang 22
End


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

3> Chương trình con và kết quả đạt được:
Trước khi đưa chương trình con và kết quả vào thì em xin giới thiệu về
phần giao diện đồ hoạ được trình gồm 3 phần chính đó là: giới thiệu, chạy Demo và
thoát. Và sau đây là phần giao diện của nó:

Khi đưa giao diện xong rồi thì ta sẽ giới qua phần giới thiệu tổng quan của bài Duyệt
dồ thị theo chiều sâu như sau:

SVTH: Diệp ……………..

Trang 23


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

Bắt đầu, khi ta giới thiệu xong phần đó rồi thì bước tiếp theo là cho chạy vào phần
Demo để thực hiện các bước trình bày sau đây theo yêu cầu của đề:


Màn hình của yêu cầu xuất hiện, lúc đó ta có thể chọn một trong ba bất kì để xem
được kết quả của bài làm mình rõ hơn. Sau đây, ta thực hiện theo từng mục của nó.
Trước khi thực hiện kết quả hiện thị trên màn hình thì ta có giải thuật thực như sau:
void creat_matrix()
{
printf("\n Nhap so dinh cua do thi n="); scanf("%d",&n);
FILE *fp1=fopen("E:\\MTke.txt","w+");
fprintf(fp1,"%d\n",n);
printf(" Nhap nua ma tran ke:");

SVTH: Diệp ……………..

Trang 24


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS)

GVHD: Triệu ……

for(int i=1;i<=n;i++)
{ for(int j=i+1;j<=n;j++)
{ printf("G[%d][%d]=",i,j);
scanf("%d",&G[i][j]);
G[j][i]=G[i][j];
}
G[i][i]=0;
}
fprintf(fp1,"\n");
fclose(fp1);}
void in_matrix()

{
FILE *fp2=fopen("E:\\MTKe.txt","r+");
if(fp2==NULL)
{
printf("\n Ma tran ke vua nhap:");
fscanf(fp2,"%3d",&n);
printf("%d\n",n);
}
for(int i=1;i<=n;i++)
{ for(int j=1;j<=n;j++)
{ fscanf(fp2,"%d",&G[i][j]);
printf("%3d",G[i][j]);
}
printf("\n"); }
fclose(fp2);
}
* Kết quả đạt được:

SVTH: Diệp ……………..

Trang 25


×