Cần giải thích thuật toán DFS

void DFS (int src){
         for(int i  = 0 ; i < V ; i++){
                visited [i] = false;
                path [i] = -1;
         }
         stack <int> s;
         visited [src] = true;
         s.push (src);
         while (! s.empty( )){
                int u = s.top();
                s.pop ();
                for (int i = 0; i < graph [u].size () ; i++ ){
                        int v = graph [u] [i ] ;
                         if (! visited [v] ) {
                                visited [v] = true;
                                s.push (v);
                                path [v] = u;
                         }
                }
         }
}

Anh chị giải thích họ em thuật toán này với ạ

image



1 Like

Nice! Cậu đã tự đi đọc lại lý thuyết DFS rồi, nên tớ đoán cậu đã hiểu function DFS ở trên rồi, đúng không? :smile:

3 Likes

vâng nhưng có chỗ em vẫn thắc mắc ạ là cái này


ở đây ngta vẽ sai hình tại cái số 4 và số 5 phải đổi cho nhau
Ngta đang xét đỉnh 5 mà đỉnh kề vs đỉnh 5 phải là 1 2 3 chứ ạ mà 3 sét rồi nên em nghĩ stack chỉ còn 1 với 2 không biết vậy có đúng k ạ

với cả cái đoạn em khoanh đỏ này nếu là stack thì phải là tạo ngăn xếp lưu các đỉnh đang xét đúng k ạ? ở đây lại ghi lại tạo hàng đợi mà hàng đợi thì ở bên bfs chứ k phải dfs đúng k ạ.
Anh xem hộ em với ạ

phải là stack :V Em tìm tài liệu tiếng Anh mà đọc chứ tài liệu tiếng Việt nhiều lỗi khó chịu lắm :V

1 Like

học xong cái này code bằng đệ quy code sướng vãi :smiley: nhanh gọn

dạ em cảm ơn ạ thì chỗ đấy phải là tạo ngăn xếp lưu các đỉnh đang xét đúng k ạ

bạn có thể nói cụ thể và rõ hơn được k ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?