Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. int A[250];
  9. int n,l;
  10.  
  11. bool zawiera(int k) //czy zbiór A zawiera element k
  12. {
  13. for (int i = 0; i <= n; i++)
  14. {
  15. if (A[i] == k)
  16. {
  17. return true;
  18. }
  19. }
  20. return false;
  21. }
  22.  
  23. bool wyklucz2(vector <int>x)
  24. {
  25. int sum = 0;
  26. for (int i = x.size() - 1; i >= 0; i--)
  27. {
  28. sum += x[i];
  29. if (!zawiera(sum))
  30. {
  31. return true;
  32. }
  33. }
  34.  
  35. return false;
  36. }
  37.  
  38.  
  39. bool weryfikuj(vector<int> x)
  40. {
  41. cout<<"weryfikacja"<<endl;
  42. int sum ;
  43. vector<int> y;
  44. for (int i = 0; i < x.size(); i++) //początek podciągu
  45. {
  46. sum = x[i];
  47. y.push_back(sum);
  48. for (int j = i + 1; j < x.size(); j++) //koniec podciągu
  49. {
  50. sum += x[j]; //sumujemy kolejne elementy podciągu
  51. y.push_back(sum);
  52. }
  53. }
  54. sort(y.begin(), y.end()/*,[](const int a, const int b) {return a > b; }*/); //sortujemy długości podciągów
  55. if (y.size() != n+1)
  56. return false;
  57. for (int i = 0; i <= n; i ++) //sprawdzamy czy zbiór długości podciągów = zbiór A
  58. if (A[i] != y[i])
  59. return false;
  60. return true;
  61. }
  62.  
  63.  
  64. void szukaj2(vector<int> x, vector<int> r, int ind, int *jest)
  65. {
  66. cout<<"ind: "<<ind<<"obecnie przetwarzany: "<<endl;
  67. for(int i = 0; i < x.size(); i++)
  68. cout<<x[i]<<" ";
  69. cout<<endl;
  70. if (ind==l)
  71. {
  72. if (weryfikuj(x))
  73. {
  74. cout<<"Znaleziono"<<endl;
  75. for(int i = 0; i < x.size(); i++)
  76. cout<<x[i]<<" ";
  77. *jest = 1;
  78. return;
  79. }
  80. }
  81. else for (int i = 0; i <r.size(); i++)
  82. {
  83. vector<int> p = x;
  84. p.push_back(r[i]);
  85. if (!wyklucz2(p))
  86. {
  87. vector<int> r1 = r;
  88. r1.erase(r1.begin()+i);
  89. szukaj2(p, r1, ind+1, jest);
  90. }
  91. else
  92. {
  93. //cout<<"odrzucono: "<<r[i]<<endl;
  94. }
  95. if (*jest==1)
  96. {
  97. return;
  98. }
  99. }
  100. }
  101.  
  102. int main()
  103. {
  104. cin>>l; //wczytywanie liczby cięć + 1 (liczby elementów w rozwiązaniu)
  105. n = 0;
  106. int jest = 0;
  107. ifstream in;
  108. in.open("in.txt");
  109. while(!in.eof())
  110. {
  111.  
  112. in>>A[n++];
  113. }
  114. n=n-2;
  115. in.close();
  116. vector<int> x;
  117. vector<int> r;
  118. for (int i = 0; i <= n; i++)
  119. {
  120. r.push_back(A[i]);
  121. }
  122. szukaj2(x, r, 0, &jest);
  123. cout<<endl;
  124. if (jest > 0)
  125. cout<<"Rozwiązanie znalezione, koniec pracy"<<endl;
  126. else
  127. cout<<"Rozwiązanie nie zostało znalezione"<<endl;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement