Advertisement
TimxAG

Untitled

Jun 19th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <vector>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. struct Graph {
  7. vector< vector<int> > AdjList;
  8. int Size;
  9.  
  10. Graph(int n) {
  11. vector<int> List;
  12. for (int k = 0; k < n; k++)
  13. AdjList.push_back(List);
  14. Size = n;
  15. }
  16.  
  17. void add_vertex() { // вершина == целое число == номер этой вершины в списке вершин
  18. Size++;
  19. vector<int> List;
  20. AdjList.push_back(List);
  21. }
  22.  
  23. void add_edge(int u, int v) { // u и v уже должны быть в списке вершин
  24. AdjList[u].push_back(v);
  25. }
  26.  
  27. int simple_paths(int start, int end, int max_depth) {
  28. bool* on_path = (bool*) calloc(Size, sizeof(bool));
  29. int cur_depth = 0;
  30. int count = 0;
  31. simple_paths(start, end, on_path, cur_depth, max_depth, count);
  32. return count;
  33. }
  34.  
  35. void simple_paths(int start, int end, bool* on_path, int& cur_depth, int max_depth, int& count) {
  36. if (cur_depth <= max_depth) {
  37. on_path[start] = true;
  38. if (start == end)
  39. count++;
  40. else
  41. for (int k = 0; k < AdjList[start].size(); k++) {
  42. int v = AdjList[start][k];
  43. if (!on_path[v]) {
  44. cur_depth++;
  45. simple_paths(v, end, on_path, cur_depth, max_depth, count);
  46. on_path[v] = false;
  47. cur_depth--;
  48. }
  49. }
  50. }
  51. }
  52.  
  53. };
  54.  
  55.  
  56. int main() {
  57. int n, k, a, b, d, tmp1, tmp2;
  58. scanf("%d %d %d %d %d", &n, &k, &a, &b, &d);
  59. Graph G(n);
  60. for (int i = 0; i < k; i++) {
  61. scanf("%d %d", &tmp1, &tmp2);
  62. G.add_edge(tmp1 - 1, tmp2 - 1);
  63. }
  64. printf("%d\n", G.simple_paths(a-1, b-1, d));
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement