Đề bài
Cho đồ thị vô hướng G=<V,E> được biểu diễn dưới dạng danh sách cạnh. Hãy viết chương trình thực hiện duyệt cây theo DFS.
Input
- Dòng đầu tiên chứa 2 số n, m là số đỉnh và số cạnh của đồ thị (1 <= n <= 1000, 1 <= m <= n*(n-1)/2).
- M dòng tiếp theo, mỗi dòng là 2 số u, v biểu diễn cạnh u, v của đồ thị (1 <= u, v <= n). Các cạnh được liệt kê theo thứ tự tăng dần của các đỉnh đầu.
Output
- In ra duyệt cây DFS tương ứng
Input |
Output |
9 10
1 2
1 3
1 5
2 4
3 6
3 7
3 9
5 8
6 7
8 9
9 3
|
1 2 4 3 6 7 9 8 5
|
Giải
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int n, m;
vector<int> adj[1001];
bool visited[1001];
void inp() {
cin >> n >> m;
for(int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
adj[x].push_back(y);
// Do thi co huong thi comment dong code sau
adj[y].push_back(x);
}
memset(visited, false, sizeof(visited));
}
void dfs(int u) {
cout << u << " ";
// Danh dau la u da duoc ghe tham
visited[u] = true;
for(int v: adj[u]) {
// Neu dinh v chua duoc tham
if(!visited[v]) {
dfs(v);
}
}
}
int main() {
// Chuyen NHAP, XUAT thanh file
freopen("lab_2_1_input.INP", "r", stdin);
freopen("lab_2_1_output.OUT", "w", stdout);
// INPUT
inp();
// OUTPUT: duyet DFS
dfs(1);
}
|