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();
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?