fork download
  1. #include <vector>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int cnt; // одоо явж байгаа замын урт
  6. int n, m; // орой болон ирмэгийн тоо
  7. int x, y; // хүсэлтийн 2 орой
  8. int s[20]; // явсан замыг хамдгалах массив
  9. bool vis[20]; // замд орсон ороогүйг хадгалах массив
  10. vector<int> adj[20]; // графын мэдээллийг хадгалах вектор
  11.  
  12. void dfs(int u) {
  13. if( u == y ) {
  14. // одоо ирсэн орой нь бидний очих ёстой оройтой ижил бол
  15. // бид нэг зам олж чадсан тул үүнийгээ хэвлэнэ
  16. for(int i = 1; i <= cnt; i++) cout << s[i] << " ";
  17. cout << y << endl; // сүүлийн оройг хэвлэнэ
  18. // учир нь бид нэмээгүй байгаа
  19. return;
  20. }
  21.  
  22. // одоо бид u гэсэн орой дээр ирж байгаа тул
  23. vis[u] = true; // замд орсон гэж тэмдэглэнэ
  24. cnt++; // замын урт нэгээр нэмэгдэнэ
  25. s[cnt] = u; // cnt-р орой гэдэг бол u гэсэн орой байх юм.
  26.  
  27. for(int v:adj[u]) {
  28. if( !vis[v] ) {
  29. // v гэсэн орой нь энэ замд ордоггүй бол энэ оройгоос
  30. // цааш явж болох зам байгаа
  31. dfs(v);
  32. }
  33. }
  34. vis[u] = 0; // энэ оройг ирээгүй болгож тэмдэглэнэ
  35. cnt--; // замын урт хасагдана
  36. }
  37.  
  38. int main() {
  39. cin >> n >> m;
  40. while( m-- ) {
  41. int u, v; // u, v 2 орой хоорондоо шууд ирмэгээр
  42. // холбогддог гэсэн үг
  43. cin >> u >> v;
  44. adj[u].push_back( v );
  45. adj[v].push_back( u );
  46. }
  47.  
  48. cin >> x >> y;
  49. dfs( x );
  50.  
  51. return 0;
  52. }
Success #stdin #stdout 0s 15240KB
stdin
7 9
1 2
1 3
1 4
3 4
3 7
4 6
5 6
5 7
6 7
1 7
stdout
1 3 4 6 5 7
1 3 4 6 7
1 3 7
1 4 3 7
1 4 6 5 7
1 4 6 7