fork download
  1. //bài toán: tìm đường đi ngắn nhất từ đỉnh Start đến tất cả các đỉnh còn lại, đồ thị vô hướng không trọng số
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int MAXN = 15;
  6.  
  7. vector<int> adj[MAXN];
  8. bool visited[MAXN];
  9. vector<int> dist(MAXN);
  10.  
  11. void bfs(int start) {
  12. queue<int> q;
  13.  
  14. q.push(start);
  15. visited[start] = true;
  16. dist[start] = 0;
  17.  
  18. while (!q.empty()) {
  19. int u = q.front();
  20. q.pop();
  21.  
  22. cout << u << ", distance from startNode: "<< dist[u]<<endl;
  23.  
  24. for (int v : adj[u]) {
  25. if (!visited[v]) {
  26. visited[v] = true;
  27. dist[v] = dist[u] + 1;
  28. q.push(v);
  29. }
  30. }
  31. }
  32. }
  33.  
  34. int main() {
  35. int n = 9, m; // n đỉnh m cạnh
  36. vector<pair<int,int>> edges = {{0,1},{0,2},{1,3},{1,4},{2,5},{2,6},{3,7},{4,8},{5,8},{6,9}};
  37. m = edges.size();
  38.  
  39. for (int i = 0; i < m; i++) {
  40. int u, v;
  41. u = edges[i].first; v = edges[i].second;
  42. adj[u].push_back(v);
  43. adj[v].push_back(u); // bỏ dòng này nếu là đồ thị có hướng
  44. }
  45.  
  46. int start = 0;
  47. bfs(start);
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 0s 5304KB
stdin
Standard input is empty
stdout
0, distance from startNode: 0
1, distance from startNode: 1
2, distance from startNode: 1
3, distance from startNode: 2
4, distance from startNode: 2
5, distance from startNode: 2
6, distance from startNode: 2
7, distance from startNode: 3
8, distance from startNode: 3
9, distance from startNode: 3