Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Node{
- string name;
- bool mark;
- };
- struct graph{
- long long int first(Node*);
- long long int next(Node*, long long int);
- pair<long long int, Node*> vertex(Node*, long long int);
- void edit_v(Node*, long long int);
- vector<Node*> nodes;
- };
- void dfs(Node*& node, graph& g, vector<string>& res, long long int k, string way = "") {
- if (node->mark || k < 0)
- return;
- way += ' ' + node->name;
- if (k == 0) {
- res.push_back(way);
- return;
- }
- g.edit_v(node, true);
- for (long long index = g.first(node); index != -1; index = g.next(node, index)) {
- auto v = g.vertex(node, index);
- dfs(v.second, g, res, k - v.first, way);
- }
- g.edit_v(node, false);
- }
- vector<string> get_ways(graph& g, long long int k) {
- vector<string> res;
- for (auto& x : g.nodes) {
- dfs(x, g, res, k, "");
- }
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement