#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100;
vector<int> adj[MAXN]; // danh sách kề
bool visited[MAXN];
bool found = false;
int n;
// DFS kiểm tra có đường đi từ u đến v hay không
void dfs(int u, int v) {
if (u == v) {
found = true;
return;
}
visited[u] = true;
for (int x : adj[u]) {
if (!visited[x]) {
dfs(x, v);
}
}
}
int main() {
n = 5;
//tạo input danh sách cạnh (edge list) cho mục đích demo
vector<pair<int,int>> edges = {
{0, 1},
{1, 2},
{0, 3},
{3, 4},
{4, 2}
};
// xây dựng danh sách kề: mỗi đỉnh u có 1 list những đỉnh kề với nó (có cạnh nối tới u)
for (auto e : edges) {
int u = e.first;
int v = e.second;
adj[u].push_back(v);
adj[v].push_back(u); // đồ thị vô hướng nên ta push cả u vào danh sách kề của v
}
int u = 0, v = 2; //demo tìm đường đi từ đỉnh 0 đến 2
memset(visited, false, sizeof(visited));
dfs(u, v);
if (found)
cout << "Co duong di tu " << u << " den " << v << endl;
else
cout << "Khong co duong di tu " << u << " den " << v << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDEwMDsKdmVjdG9yPGludD4gYWRqW01BWE5dOyAgIC8vIGRhbmggc8OhY2gga+G7gQpib29sIHZpc2l0ZWRbTUFYTl07CmJvb2wgZm91bmQgPSBmYWxzZTsKaW50IG47CgovLyBERlMga2nhu4NtIHRyYSBjw7MgxJHGsOG7nW5nIMSRaSB04burIHUgxJHhur9uIHYgaGF5IGtow7RuZwp2b2lkIGRmcyhpbnQgdSwgaW50IHYpIHsKICAgIGlmICh1ID09IHYpIHsKICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZpc2l0ZWRbdV0gPSB0cnVlOwoKICAgIGZvciAoaW50IHggOiBhZGpbdV0pIHsKICAgICAgICBpZiAoIXZpc2l0ZWRbeF0pIHsKICAgICAgICAgICAgZGZzKHgsIHYpOwogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBuID0gNTsKCiAgICAvL3ThuqFvIGlucHV0IGRhbmggc8OhY2ggY+G6oW5oIChlZGdlIGxpc3QpIGNobyBt4bulYyDEkcOtY2ggZGVtbwogICAgdmVjdG9yPHBhaXI8aW50LGludD4+IGVkZ2VzID0gewogICAgICAgIHswLCAxfSwKICAgICAgICB7MSwgMn0sCiAgICAgICAgezAsIDN9LAogICAgICAgIHszLCA0fSwKICAgICAgICB7NCwgMn0KICAgIH07CgogICAgLy8geMOieSBk4buxbmcgZGFuaCBzw6FjaCBr4buBOiBt4buXaSDEkeG7iW5oIHUgY8OzIDEgbGlzdCBuaOG7r25nIMSR4buJbmgga+G7gSB24bubaSBuw7MgKGPDsyBj4bqhbmggbuG7kWkgdOG7m2kgdSkKICAgIGZvciAoYXV0byBlIDogZWRnZXMpIHsKICAgICAgICBpbnQgdSA9IGUuZmlyc3Q7CiAgICAgICAgaW50IHYgPSBlLnNlY29uZDsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2sodSk7IC8vIMSR4buTIHRo4buLIHbDtCBoxrDhu5tuZyBuw6puIHRhIHB1c2ggY+G6oyB1IHbDoG8gZGFuaCBzw6FjaCBr4buBIGPhu6dhIHYKICAgIH0KCiAgICBpbnQgdSA9IDAsIHYgPSAyOyAvL2RlbW8gdMOsbSDEkcaw4budbmcgxJFpIHThu6sgxJHhu4luaCAwIMSR4bq/biAyCgogICAgbWVtc2V0KHZpc2l0ZWQsIGZhbHNlLCBzaXplb2YodmlzaXRlZCkpOwogICAgZGZzKHUsIHYpOwoKICAgIGlmIChmb3VuZCkKICAgICAgICBjb3V0IDw8ICJDbyBkdW9uZyBkaSB0dSAiIDw8IHUgPDwgIiBkZW4gIiA8PCB2IDw8IGVuZGw7CiAgICBlbHNlCiAgICAgICAgY291dCA8PCAiS2hvbmcgY28gZHVvbmcgZGkgdHUgIiA8PCB1IDw8ICIgZGVuICIgPDwgdiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==