Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::vector<std::vector<int>> AEGraph::possible_double_cuts() const {
- /*folosim un stack pentru a introduce fiecare subgraf,
- in cazul in care nu are atomi si nu este SA atunci se poate face
- operatia de double cut*/
- std::vector<std::vector<int>> paths;
- std::stack<AEGraph> my_stack;
- my_stack.push(*this);
- while(!my_stack.empty()) {
- auto aux = my_stack.top();
- my_stack.pop();
- if(!aux.is_SA && aux.num_atoms() == 0) {
- if(get_paths_to(aux).size())
- /*in cazul in care exista path-ul, il introducem drept
- path pentru subgraful corect*/
- paths.push_back(get_paths_to(aux)[get_paths_to(aux).size() - 1]);
- }
- for (int i = 0; i < aux.num_subgraphs(); ++i) {
- my_stack.push(aux.subgraphs[i]);
- }
- }
- return paths;
- }
- AEGraph AEGraph::double_cut(std::vector<int> where) const {
- std::string string_final= {};
- auto aux = this->subgraphs[where[0]];
- /*varianta originala a grafului*/
- string_final = this->repr();
- for (unsigned int i = 1; i < where.size(); i++){
- aux = aux.subgraphs[where[i]];
- }
- /*stringul subgrafului caruia trebuie sa i se aplice double cut*/
- std::string string_gresit = aux.repr();
- /*o copie a stringului anterior din care stergem 2 perechi de paranteze*/
- std::string string_corect = string_gresit;
- string_corect.erase(string_corect.begin(), string_corect.begin() + 2);
- string_corect.erase(string_corect.end() - 2, string_corect.end());
- /*inlocuim string-ul gresit cu cel modificat in interiorul stringului
- grafului original*/
- int found = string_final.find(string_gresit);
- string_final.replace(found, string_gresit.length(), string_corect);
- return AEGraph(string_final);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement