Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 31

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 ………… Sinh Viên Thực Hiện:


Giáo Viên Hướng Dẫ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 HỌ TÊN MÃ SỐ ĐỀ TÀI


1 DIỆP ……. NL1 – TH…
2

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 năm 20…


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

SVTH: Diệp …………….. Trang 1


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

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à
đồ 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.

SVTH: Diệp …………….. Trang 2


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

- 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:
- 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.

SVTH: Diệp …………….. Trang 3


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

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.
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:

SVTH: Diệp …………….. Trang 4


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

+ 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.

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 2 3 4 5 6
1 0 1 1 0 0 0 
2 1 0 1 1 0 0 
 
3 1 1 0 0 1 0 
 
4  0 1 0 0 1 1 
5 0 0 1 1 0 1 
 
6 0 0 1 1 0 1 

- Tính chất:

SVTH: Diệp …………….. Trang 5


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

+ 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 2 3 4 5
1 0 1 1 0 0 
20 0 0 1 1 

3 0 0 0 1 0
 
4 0 0 0 0 0
51 0 0 0 0

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

1 2 3 4 5 6
1 0 3 7 0 0 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++)

SVTH: Diệp …………….. Trang 6


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

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.
- Để 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++)
{

SVTH: Diệp …………….. Trang 7


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

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; i<n; i++)
if (chuaxet[i] == 0)
{
solt++;
DFS(i);
}
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.

SVTH: Diệp …………….. Trang 8


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

Để 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++)
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:

SVTH: Diệp …………….. Trang 9


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

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;
}
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])

SVTH: Diệp …………….. Trang 10


Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS) GVHD: Triệ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)
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)

SVTH: Diệp …………….. Trang 11


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

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.

III. MÔ HÌNH, LƯU ĐỒ, CHƯƠNG TRÌNH CON VÀ KẾT QUẢ ĐẠT ĐƯỢC:

1.Mô hình của chương trình chính:

BEGI
BEGI N
N
Nhập số phần tử
Nhập ma trận, in ma
n
NHẬP DỮ trận, thành phần liên
LIỆU thông, DFS, …
File *fp1=
fopen(“MTKe.txt”,”w”)

MENU XỬ LÝn

i=1
END
S
i <= n

Đ
2. Lưu đồ của một số chương trình:
Fclose(fp1)
a> Creat_matrix: j=i+1
j ++

S END
G[i][j] = 0 j <= n

Đ
G[i][j]
SVTH: Diệp …………….. Trang 12

G[i][j] = G[j][i] j ++
Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS) GVHD: Triệu ……

BEGI
N

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

tp2 = =
null
Đ

i=1

b> in_matrix:
S fClose(tp2)
i <= d END

Đ
j ++
j=1
j ++

SVTH: Diệp …………….. Trang 13


j <= n G [i] [j] G [i] [j]
Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS) GVHD: Triệu ……

BEGI
N

Nhập số phần tử
n

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

Chuaxet[u] = 0

i=1

S Fclose(fp2)
i <= n

Đ
END
j=1

c> DFS:
S
j <= n

j ++ Đ
G[i][j]
S

A[u][i] &&
chuaxet[i]
SVTH: Diệp …………….. Đ Trang 14

DFS1 (i) j ++
Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS) GVHD: Triệu ……

BEGI
N

i=1

S DFS (u)
i <= n
d> Duyệt DFS:
Đ
i=1
i ++ Chuaxet (i) = 1

j <= n EN
D
Đ
SVTH: Diệp …………….. Trang 15
Đ
DFS (i) i ++ chuaxet[i
Đề tài: Duyệt Đồ Thị Theo Chiều Sâu (DFS) GVHD: Triệu ……

BEGI
N

S Đ
n solt = 1 Đồ thị liên thông

i=1

S
i <= EN
solt D
Đ
i

j=0

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


j <= n
j ++
S Đ
S chuaxet[j] == j+1
i

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

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

BEGI
N

Meset (chuaxet, osizeof (chuaxet))


e> liên thông:

solt = 1

i=0

S
i <= n
i ++
Đ Ketqualienthong
S
chuaxet[i] ==
0
Đ EN
D
solt ++
SVTH: Diệp …………….. Trang 17

i++ DFS1 (i)


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

Begin
f> chương trình chính:

Nhap dinh n

Nhap ma tran

In ma tran

DFS

Lien thong

3> Chương trình con và kết quả đạt được: End

SVTH: Diệp …………….. Trang 18


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

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 19


Đề 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:");
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+");

SVTH: Diệp …………….. Trang 20


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

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:
Nhập dữ liệu đầu vào khi hiển thị ma trận.

Mới nhập xong ma trận. Nhìn vào hình trên thì thấy nó yêu cầu nhiều nhưng em chỉ
thực hiện phần nhập ma trận cho file văn bản. Còn mấy ý khác thì tương tự như vậy.
Bây giờ, ta đã thực hiện xong ý thứ nhất bây giờ thực hiện tiếp ý thứ hai tiếp
nội dung vừa nãy đó là: vẽ đồ thị bằng đồ hoạ. Trong phần vẽ đồ thị em có dử dụng

SVTH: Diệp …………….. Trang 21


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

hàm thư viện con chuột để vẽ nó. Khi vào vẽ đồ thị thì ta sẽ có phần hướng dẫn vẽ đồ
thị như sau:

* Giải thuật như sau:


void ve_do_thi(chitietdinh dinh[max], int sodinh, chitietcanh[max], int socanh)
{
int i,j,dem;
char s[5];
cleardevice();
//ve_khung();
setcolor(13);
for(j=1;j<=socanh;j++){
line(dinh[canh[j].d1].x,dinh[canh[j].d1].y,dinh[canh[j].d2].x,dinh[canh[j].d2].y);
itoa(canh[j].trongso,s,10);
outtextxy((dinh[canh[j].d1].x+dinh[canh[j].d2].x)/2-2,
(dinh[canh[j].d1].y+dinh[canh[j].d2].y)/2+10,s);
}
ve_dinh(dinh,sodinh);
}

* Kết quả đạt được:

SVTH: Diệp …………….. Trang 22


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

Và thêm cái hình ví dụ về đồ thị có 6 đỉnh như sau:

Đáng lẽ vẫn còn một ý nữa nhưng em chưa thực hiện được nên chương trình của em
tới đây đã xong, Và sau đây ta sẽ kết thúc chương trình nên chọn nút thoát, Trước khi
thoát thì ta thấy sẽ găp màn hình này rồi sẽ kết thúc.

SVTH: Diệp …………….. Trang 23


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

CHƯƠNG 3: KẾT LUẬN VÀ ĐÁNH GIÁ

I. KẾT QUẢ ĐẠT ĐƯỢC:


- Về lý thuyết đã áp dụng được với giải thuật đồng thời kết hợp với ngôn ngữ
lập trình để giải quyết hoàn chỉnh.
- Về chương trình Demo: kết hợp giao diện thân thiện với người dùng và
những công việc dễ dàng để người sử dụng dễ thực thi hơn. Cùng với những lời
hướng dẫn để thực hiện chương trình trước khi chạy.
- Qua đề tài niên luận này giúp em hiểu ra được một số vấn đề cần thiết trong
khi lập trình và sửa được bài làm của mình để có thể hoàn chỉnh hơn.

II. HẠN CHẾ:


Do đây là lần đầu tiên em làm niên luận này. Với kiến thức còn hạn hẹp nên
chương trình vẫn còn nhiều thiếu sót, chưa đáp ứng đầy đủ các yêu cầu của đề ra. Và
chưa làm hoàn thành đúng những nội dung đó, vẫn còn thiếu một ý nữa mới hoàn tất
xong được. Chưa đi sâu và vấn đề và giao diện chưa đẹp mắt lắm.

III. HƯỚNG PHÁT TRIỂN:


Hoàn chỉnh tốt chương trình mình thực hiện, cố gắng khắc phục những lỗi sai
và cải thiện chương trình một cách nhanh chóng. Để có thể hoàn thành một chương
trình đúng như yêu cầu của nội dung. Đồng thời, biết cách tạo ra những ý của riêng
mình để chương trình chạy được hoàn thiện hơn. Vì vậy, hướng phát triển tiếp theo là
hoàn thành chương trình ngày càng hoàn thiện đầy đủ chức năng hơn.

SVTH: Diệp …………….. Trang 24


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

TÀI LIỆU THAM KHẢO

********
[1] Giáo trình cấu trúc dữ liệu của Trường đại học Cần Thơ.
[2] Giáo trình ngôn ngữ C: Th.Sĩ Tiêu Kim Cương, Nhà Xuất Bản Giáo Dục.
[3] Lý Thuyết Đồ Thị: Nguyễn Hữu Ngự, Nhà Xuất Bản Đai Học Quốc Qia Hà Nội.
[4] Tài liệu tham khảo trên mạng.
[5] Wirth,Chương trình = Cấu trúc dữ liệu + Giải thuật

SVTH: Diệp …………….. Trang 25


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

SVTH: Diệp …………….. Trang 26

You might also like