Sửa code cài đặt DFS bằng vector

cho em hỏi code này sai ở đâu ạ, khi em chạy thì nó chỉ ra đỉnh đầu tiên là s với dấu phẩy thôi ạ, rồi đứng im luôn chứ không báo lỗi gì cả. Đề bài là tìm đường từ s tới t trong đồ thị có n đỉnh m cung ạ.

#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
const int maxN = 1e6;
int n, m, s, t, trace[maxN];
bool avail[maxN];
vector<int> adj[maxN];
ifstream fi ("DFS.INP");
void Enter() //Nhập dữ liệu
{
 fi >> n >> m >> s >> t;
 while (m-- > 0)
 {
 int u, v;
 fi >> u >> v; //Đọc một cạnh (u, v)
 adj[u].push_back(v); //Đưa v vào danh sách kề của u
 }
}
void DFSVisit(int u) //Thuật toán tìm kiếm theo chiều sâu bắt đầu từ u
{
 avail[u] = false; //Đánh dấu u đã thăm
 cout << u << ", "; //Liệt kê u
 for (int v: adj[u]) //Xét mọi đỉnh v nối từ u
 if (avail[v]) //Nếu v chưa thăm
 {
 trace[v] = u; //Lưu vết đường đi s → … → u → v
 DFSVisit(v); //Đệ quy tìm kiếm theo chiều sâu bắt đầu từ v
 }
}
void PrintPath() //In đường đi
{
 if (avail[t]) //t chưa thăm: không có đường từ s tới t
 cout << "There's no path from " << s << " to " << t << '\n';
 else
 {
 cout << "The path from " << s << " to " << t << ":\n";
 for (int u = t; u != s; u = trace[u]) //Truy vết ngược từ t về s
 cout << u << " <- ";
 cout << s << "\n";
 }
}
int main()
{
 Enter();
 fill(avail, avail + n, true); //Khởi tạo các đỉnh đều chưa thăm
 cout << "Reachable vertices from " << s << ":\n";
 DFSVisit(s); //Thuật toán tìm kiếm theo chiều sâu bắt đầu từ s
 cout << "\n";
 PrintPath();
}

câu lệnh này thì sao ạ? :<<

oops

Ở đây thì lại chạy ổn :smiley: https://repl.it/repls/ThisWorseBudgetrange

4 5 1 3
1 2
2 3
3 0
1 0
2 1
3 Likes

Cẩn thận cái fill. Nếu đỉnh đánh số từ 1-> n thì fill a+1, a+1+n

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