Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<vector>
- #include <algorithm>
- using namespace std;
- int A[250];
- int n,l;
- bool zawiera(int k) //czy zbiór A zawiera element k
- {
- for (int i = 0; i <= n; i++)
- {
- if (A[i] == k)
- {
- return true;
- }
- }
- return false;
- }
- bool wyklucz2(vector <int>x)
- {
- int sum = 0;
- for (int i = x.size() - 1; i >= 0; i--)
- {
- sum += x[i];
- if (!zawiera(sum))
- {
- return true;
- }
- }
- return false;
- }
- bool weryfikuj(vector<int> x)
- {
- cout<<"weryfikacja"<<endl;
- int sum ;
- vector<int> y;
- for (int i = 0; i < x.size(); i++) //początek podciągu
- {
- sum = x[i];
- y.push_back(sum);
- for (int j = i + 1; j < x.size(); j++) //koniec podciągu
- {
- sum += x[j]; //sumujemy kolejne elementy podciągu
- y.push_back(sum);
- }
- }
- sort(y.begin(), y.end()/*,[](const int a, const int b) {return a > b; }*/); //sortujemy długości podciągów
- if (y.size() != n+1)
- return false;
- for (int i = 0; i <= n; i ++) //sprawdzamy czy zbiór długości podciągów = zbiór A
- if (A[i] != y[i])
- return false;
- return true;
- }
- void szukaj2(vector<int> x, vector<int> r, int ind, int *jest)
- {
- cout<<"ind: "<<ind<<"obecnie przetwarzany: "<<endl;
- for(int i = 0; i < x.size(); i++)
- cout<<x[i]<<" ";
- cout<<endl;
- if (ind==l)
- {
- if (weryfikuj(x))
- {
- cout<<"Znaleziono"<<endl;
- for(int i = 0; i < x.size(); i++)
- cout<<x[i]<<" ";
- *jest = 1;
- return;
- }
- }
- else for (int i = 0; i <r.size(); i++)
- {
- vector<int> p = x;
- p.push_back(r[i]);
- if (!wyklucz2(p))
- {
- vector<int> r1 = r;
- r1.erase(r1.begin()+i);
- szukaj2(p, r1, ind+1, jest);
- }
- else
- {
- //cout<<"odrzucono: "<<r[i]<<endl;
- }
- if (*jest==1)
- {
- return;
- }
- }
- }
- int main()
- {
- cin>>l; //wczytywanie liczby cięć + 1 (liczby elementów w rozwiązaniu)
- n = 0;
- int jest = 0;
- ifstream in;
- in.open("in.txt");
- while(!in.eof())
- {
- in>>A[n++];
- }
- n=n-2;
- in.close();
- vector<int> x;
- vector<int> r;
- for (int i = 0; i <= n; i++)
- {
- r.push_back(A[i]);
- }
- szukaj2(x, r, 0, &jest);
- cout<<endl;
- if (jest > 0)
- cout<<"Rozwiązanie znalezione, koniec pracy"<<endl;
- else
- cout<<"Rozwiązanie nie zostało znalezione"<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement