Chương 3
CÁC THUT TOÁN TÌM KIM
TRÊN ĐỒ THNG DNG
2
17/03/2011
3.1 Tìm kiếm theo chiu sâu trên đồ th
Lý thuyết đồ th
Depth First Search
B1. Xut phát t1đỉnh cho trướcnàođó.
B2. X đỉnh này đánh duđể không x lnsau.
B3. Đưattccác đỉnh kvi vào danh sách x chn1
đỉnh để x tiếp theo.
B4.QuayliB2chođến khi không còn đỉnh trong danh sách.
VD:
Btđầut1. Đưa các đỉnh kvi 1 vào DS: 2, 4, 5
Chn2để xlý. Đưa các đỉnh k
vi 2 vào DS: 3, 4, 5,
Tht:123546
123
4 5 6
3
17/03/2011
3.1 Tìm kiếm theo chiu sâu trên đồ th
Lý thuyết đồ th
Phân tích:
Dùng cu trúc Stack
–Sdng mng đánh dulàmng 1 chiu:
int danhdau[maxV];
•Quyước:
danhdau[i] = 0; đỉnh i chưađượcxét
danhdau[i] = 1; đỉnh i đãđượcxét
4
17/03/2011
3.1 Tìm kiếm theo chiu sâu trên đồ th
Lý thuyết đồ th
void DFS(DOTHI g, int s) // s la dinh xuat phat
{
int danhdau[maxV];
Stack st;
//Khoi tao
for (int i = 1; i<=g.nV; i++)
danhdau[i] = 0; // chua co dinh nao duoc xet
Khoitao(st); // Khoi tao Stack
// Bat dau
Push(st,s); // Dua s vao Stack
while (!isEmpty(st)) //Trong khi Stack chua rong
{
int v = Pop (st); // Lay v ra khoi Stack
if (danhdau[v] != 1) // Neu v chua xet
{
cout<<v<<“ “;danhdau[v] = 1;
for (i=g.nV; i>=1; i--)
if (!danhdau[i] && g.mtke[v][i] != 0)
Push(st,i);
}
}
}
5
17/03/2011
3.1 Tìm kiếm theo chiu sâu trên đồ th
Lý thuyết đồ th
Đưa 1 vào Stack
Ly1raxlý, đưa 5, 4, 2 vào Stack
Ly2raxlý, đưa 5, 3 vào Stack
Ly3raxlý, đưa 6, 5 vào Stack
Ly5raxlý, đưa 4 vào Stack
Ly4raxlý. Không đưa vào Stack
Ly6raxlý. Không đưa vào Stack
Ly 5 ra. Không x (vì đãx ri)
Ly 4 ra. Không x
Ly 5 ra. Không x
123
4 5 6
1
1
5
4
25
3
2 3
6
5
5
4
4 6
Stack
Thtduyt: