Advertisement
CyberN00b

Untitled

Jan 6th, 2023
963
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. struct Node{
  2.  
  3.     string name;
  4.     bool mark;
  5. };
  6.  
  7. struct graph{
  8.  
  9.     long long int first(Node*);
  10.     long long int next(Node*, long long int);
  11.     pair<long long int, Node*> vertex(Node*, long long int);
  12.     void edit_v(Node*, long long int);
  13.     vector<Node*> nodes;
  14. };
  15.  
  16. void dfs(Node*& node, graph& g, vector<string>& res, long long int k, string way = "") {
  17.     if (node->mark || k < 0)
  18.         return;
  19.     way += ' ' + node->name;
  20.     if (k == 0) {
  21.         res.push_back(way);
  22.         return;
  23.     }
  24.     g.edit_v(node, true);
  25.     for (long long index = g.first(node); index != -1; index = g.next(node, index)) {
  26.         auto v = g.vertex(node, index);
  27.         dfs(v.second, g, res, k - v.first, way);
  28.     }
  29.     g.edit_v(node, false);
  30. }
  31.  
  32. vector<string> get_ways(graph& g, long long int k) {
  33.     vector<string> res;
  34.     for (auto& x : g.nodes) {
  35.         dfs(x, g, res, k, "");
  36.     }
  37.     return res;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement