Tải bản đầy đủ (.pptx) (22 trang)

STACK 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 (262.73 KB, 22 trang )

BÀI TOÁN TÌM KIẾM CHIỀU SÂU DFS
Nhóm 2: TRẦN MẠNH LINH
NGUYỄN DUY HÙNG
DOÃN VĂN THIỀU


BÀI TOÁN TÌM KIẾM CHIỀU
SÂU DFS
– Đây là thuật toán tìm các đỉnh bằng cách duyệt theo chiều sâu.
– Xuất phát từ 1 đỉnh và đi mãi cho đến khi không thể đi tiếp, sau đó đi về lại
đỉnh đầu.
Trong quá trình quay lại:
+ nếu gặp đường đi khác thì đi cho đến khi không đi tiếp được nữa và cứ lặp
lại như thế.
+ nếu không tìm ra đường đi nào khác thì ngừng việc tìm kiếm.
– Sở dĩ thuật toán này tìm được đường đi là nhờ vào cơ chế đánh dấu và lưu đỉnh
cha. Quá trình đánh dấu khiến 1 đỉnh không thể xét 2 lần và có thể xem được
đường đi từ đỉnh Kết Thúc đến đỉnh Xuất phát dựa vào việc lưu đỉnh cha.


Cấu trúc dữ liệu


Ma trận kề: giả sử G=(i,j)là đồ thị có số đỉnh là n. i,j là thứ tự các đỉnh từ 1đến
n.Khi đó ta có thể biểu diễn đồ thị bằng 1 ma trận vuông A[i][j] cấp n, trong đó:





A[i][j]=1 nếu đỉnh i nối với đỉnh j





A[i][j]=0 nếu đỉnh i không nối với đỉnh j

Danh sách cạnh: trong trường hợp đồ thị n cạnh, m cạnh, ta có thể biểu diễn
đồ thị dưới dạng danh sách cạnh bằng cách liệt kê tất cả các cạnh của đồ thị
trong một danh sách, mỗi phần tử là cặp (s,u) tương ứng với một cạnh của đồ
thị



Danh sách kề: trong cánh biểu diễn này, với mỗi đỉnh của đồ thị ta cho tương
ứng với nó một danh sách các đỉnh kề



Ví dụ:

Ma trận kề:

Danh sách cạnh:

Danh sách kề

1

2

3


4


Ý tưởng thuật toán
 Ta

coi việc tìm kiếm chiều sâu như khám phá
một ma trận với một sợi chỉ và một thùng sơn
để đánh dấu. Với mỗi đỉnh là một cánh cổng
bắt đầu từ đỉnh s, buộc chỉ vào s và đánh
dấu đã thăm

 Ta

 Bây

giờ ta đi theo cạnh (s,u) bất kỳ

 Nếu cạnh (s,u) dẫn

chúng ta đến đỉnh u đã
thăm , ta quay trở về s.


u là mới, ta di chuyển tới u và đánh dấu như với
đỉnh s và đặt nó thành đỉnh s mới.

 Nếu


 Cuối

cùng ta có thể đi đến một đỉnh mà tại đó tất cả
các cạnh kề với nó đều dẫn ta đến đỉnh đã thăm. Khi
đó, ta sẽ quay lui bằng cách cuộn ngược cuộn chỉ và
quay về đến khi trở lại 1 đỉnh có một cạnh chưa được
khám phá. Lại tiếp tục quy trình như trên.

 Đến

khi tất cả các đỉnh được đã được thăm thì dừng lại.
(DFS dừng)


Mô tả thuật toán
Ma trận kề :
(ma trận biểu diễn các đường nối của các
đỉnh)
Ví dụ: bài toán DFS với 4 đỉnh có ma trận
Đỉnh 1
sau
0 0 1 1
Đỉnh 2
Đỉnh
3
Đỉnh 4

0 0 1 0
1 1 0 0
1 0 0 0


Có hai cấu trúc để giải quyết bài toán tìm
kiếp chiều sâu DFS:
- Cấu trúc đệ quy
- Cấu trúc stack

1

2

3

4


Bảng đánh dấu
Bảng truy vết

1

2

3

4

0
1

0

1

0
1

0
1

1

2

3

4

0

0
3

0
1

0
1

Bắt đầu duyệt từ Đỉnh 1, đánh dấu Đỉnh 1.
Duyệt Đỉnh 3. Thêm Đỉnh 1 vào trước Đỉnh 3 trong bảng
truy vết.

Duyệt Đỉnh 2, thêm 3 vào trước Đỉnh
2.
Đỉnh 2 đã hết. Quay lại duyệt tiếp từ Đỉnh 3.
Đỉnh 3 đã hết. Quay lại duyệt tiếp từ Đỉnh 1.

1

2

3

Đỉnh 4 chưa được duyệt. Duyệt nốt Đỉnh 4.

Tất cả các đỉnh đã được duyệt.

4


Thăm đỉnh 1

1

Thăm đỉnh 3

1

3

Thăm đỉnh 2


1

3

2
2

Đỉnh 2 không có đỉnh kề chưa
thăm. Quay trở lại

1

3

Đỉnh 3 không có đỉnh kề chưa
thăm. Quay trở lại

1

3

1

4

Thăm đỉnh 4

1

3


2

4

Đã thăm hết các đỉnh thuật toán dừng lại
Và Trình tự duyệt là 1324


Bài 1:Tìm đường đi giữa hai đỉnh bất kỳ của đồ thị
Ý tưởng thuật toán:
Thuật toán DFS cho phép xây dựng bắt đầu từ 1 đỉnh,duyệt các
đỉnh có liên thông với đỉnh đó và đánh dấu đỉnh đã duyệt
Vì thế muốn tìm đường đi gữa 2 đỉnh bất kì(s->v) thì có 2 cách:
Cách 1: ta chỉ cần duyệt và sau in ra đường đi mà có đầu và cuối là 2
đỉnh s và v theo yêu cầu
Cách 2:ta duyệt khi nào duyệt tới đỉnh tiếp theo duyêt là đỉnh v thì dừng
lại


Tìm đường đi giữa hai đỉnh bất kỳ của
đồ thị
Code:
for (i=0;i{
truoc[i]=-1;
chuaxet[i]=0;
}
vung=1;
DFS(dau);

InDuongDi(dau,cuoi);


Bài toán 2:
Kiểm tra Tính liên thông trong đồ thị vô hướng:
Một

đồ thị vô hướng được gọi là liên
thông nếu có đường đi giữa mọi cặp
đỉnh phân biệt của đồ thị.

Giữa

mọi cặp đỉnh phân biệt của một
đồ thị vô hướng liên thông luôn có
đường đi đơn


Kiểm tra tính chất liên thông của đồ
thị


Một đồ thị có thể liên thông hoặc không liên thông

 Nếu

đồ thị liên tông thì số thành phần liên thông của
nó bằng 1.Điều này tương đương với phép duyệt DFS
được gọi đến 1 lần


 Nếu

đồ thị không liên thông(số thành phần liên thồn
lớn hơn 1) chúng ta có thể tách chúng thành các đồ thị
con->số thành phần liên thông con của nó bằng số lần
gọi tới thủ tục DFS


Kiểm tra tính chất liên thông của đồ thị
Vd1:
Đồ thị bên là đồ thị liên thông

1

2

3

4


Kiểm tra tính chất liên thông của đồ thị
Vd2:

1

2

3


Đồ thị H gồm thành phần liên thông H1, H2,H3

4

8

H

H3

1

5

6

9

H

H2

7


Kiểm tra tính chất liên thông của đồ
thị
 Vd3

Đồ thị không liên thông



Kiểm tra tính chất liên thông của đồ thị
 Để

xác định số các thành phần liên thông của đồ
thị,chúng ta sử dụng biến mới solt để ghi nhận
các đỉnh cùng một thành phần liên thông trong
mảng chuaxet[] như sau:

o

Nếu đỉnh I chưa được duyệt,chuaxet[i] có giá trị 0;

o

Nếu đỉnh I chưa duyệt thuộc thành phần liên
thông thứ j=solt, ta ghi nhận chuaxet[i]=solt

o

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[]


Kiểm tra tính chất liên thông của đồ
thị
Giải mã:
void Connected(int V)
DFS(V);


//Gọi thuật toán duyệt DFS

for(int i=0;i{
if(chuaxet[i])
{printf(“ Đồ thị không liên thông”); return;}
else printf(“Đồ thị liên thông”);
return;
}


Bài toán 3:
Tìm cây khung của đồ thị
Định Nghĩa: Cây khung H của đồ thị G có n đỉnh là cây
con của đồ thị G chứa tất cả các đỉnh của G và thỏa mãn:
H không có chu trình, liên thông và có n-1 cạnh.
Giữa 2 đỉnh bất kỳ của H được nối với nhau bởi
đúng 1 đường đi.


Tìm kiếm cây khung
Cách thức xây dựng Cây khung sử dụng thuật toán DFS:
 Giả

sử ta cần xây dựng 1 cây khung xuất phát từ đỉnh u
nào đó.

 Duyệt




DFS

Nếu a[v][i]=1 && chuaxet[i] thì duyệt tiếp
Ngược lại thì kết thúc


Tìm kiếm cây khung
1

2

3

1

4

2

3

4

Số

N-2

lượng cây khung của đồ thị là N



Tìm kiếm cây khung
1

1

2

5

3

4

1

2

5

2

3

4

5

3


4


Cám ơn bạn đã lắng nghe



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×