/* Este metodo tem a funcao de ler todos os elementor que o usuario digitar*/ void Interface::lerVetor(Conjunto &Vet) {//inicio int i=0, elemento=0; for(int i=0; i<Vet.obterTamanho();){//1° repita cout<<"Vetor["<<i<<"]="; cin>>elemento; if(!Vet.atribuir(elemento)){//Se atribur retornar 0 ele n poderá impedir o usuario de digitar elementos repetidos cout<<" Elemento repetido, Digite novamente..."<<std::endl;} else i++; }//fim 1° repit }//fim do metodo ler vetor
void Interface::escreverVetor(const Conjunto &Vet) {//Inicio cout<<"[ "; int elemento; for(unsigned int pos=0; pos<Vet.obterIndiceUso(); pos ++){ Vet.obter(pos,elemento); cout<<elemento<<" "; } cout<<"]"; }//Fim do metodo Escrever Vetor
void check_crear_conjunto() { Conjunto<int> c; ASSERT_EQ(c.pertenece(1), false); ASSERT_EQ(c.pertenece(2), false); c.insertar(1); ASSERT_EQ(c.pertenece(1), true); ASSERT_EQ(c.pertenece(2), false); }
int main(int argc, const char * argv[]) { Conjunto C1; for(int k=1; k<=5; k++) C1.agrega(k); Conjunto C2; C2.agrega(2); C2.agrega(2); C2.agrega(4); C2.agrega(5); C2.agrega(6); C1.despliega(); C2.despliega(); Conjunto D; D = C1 + C2; D.despliega(); D = C1 - C2; D.despliega(); D = C1 * C2; D.despliega(); return 0; }
void krukal_like(Grafo *g, vector< pair<int, int> > relacao2){ //map<int, vector< int * > > at; /*cada vector<pair <int *, int*> > funciona, na verdade, como uma lista de arvores de tamanho t, onde t é seu indice em map. Portanto, uma lista de arvores da forma T^(t) I^(t), do algorito original, nada mais é senao os indices do t-ésimo vector do map*/ //int *grausChegada = new int[relacao->getQuantVertices()]; at[0].push_back(new int[g->getQuantArestas()]); for (int i=0; i<g->getQuantArestas(); i++) at[0][0][i] = 0; map<int, vector<Conjunto * > > conjuntos; Conjunto *conjunto = new Conjunto(g->getQuantVertices()); conjuntos[0].push_back(conjunto); for (int t=1; t<=g->getQuantVertices()-1; t++){ vector<int * > It = at[t-1]; vector<Conjunto* > veco = conjuntos[t-1]; // cout<<"Iteracao "<<t<<endl; for (int i=0; i<It.size(); i++){ Conjunto *conjIt = veco[i]; vector <Aresta *> max = maximal(g, It[i], conjIt, relacao2); //cout<<"size = "<<max.size()<<" obj = "<<max[0]->getPeso1()<<" , "<<max[0]->getPeso2()<<endl; // ///TRACE // int pesodo1=0, pesodo2=0; // cout<<"\tSubarvore "<<i+1<<endl; // for (int zutiu=0; zutiu<g->getQuantArestas(); zutiu++){ // if (It[i][zutiu]==1){ // cout<<"\t\t"<<(g->get_allArestas())[zutiu]->getOrigem()<<" "<<(g->get_allArestas())[zutiu]->getDestino()<<" "<<(g->get_allArestas())[zutiu]->getPeso1()<<" "<<(g->get_allArestas())[zutiu]->getPeso2()<<endl; // pesodo1+=(g->get_allArestas())[zutiu]->getPeso1(); // pesodo2+=(g->get_allArestas())[zutiu]->getPeso2(); // } // } // cout<<"\t\t("<<pesodo1<<","<<pesodo2<<")"<<endl; // cout<<"\t\tLista de arestas não dominadas entre si que não estão nesta subárvore e não ciclo:"; // //TRACE for (int a=0; a<max.size(); a++){ if (conjIt->compare(max[a]->getOrigem(), max[a]->getDestino())==false){ // cout<<" "<<max[a]->getOrigem()<<"-"<<max[a]->getDestino(); int * arvore = new int[g->getQuantArestas()]; for (int p=0; p<g->getQuantArestas(); p++) arvore[p] = It[i][p]; arvore[max[a]->getId()] = 1; Conjunto * auxxx = new Conjunto(g->getQuantVertices()); auxxx->copia(conjIt); auxxx->union1(max[a]->getOrigem(), max[a]->getDestino()); conjuntos[t].push_back(auxxx); at[t].push_back(arvore); } //} } // cout<<endl; } // cout<<endl; // retira duplicatas for (int i=0; i<at[t].size(); i++){ for (int j=i+1; j<at[t].size(); j++){ if (isEgal(at[t][i], at[t][j], g->getQuantArestas())){ at[t].erase(at[t].begin()+j); conjuntos[t].erase(conjuntos[t].begin()+j); j--; } } } } //return at[g->getQuantVertices()-1]; }
int main() { int num, p = 0, elem, opc, iteraciones = 0, checker = 0; Conjunto Obj; while(true) { cout<<endl<<endl<<"Por favor seleccione la opcion que desea realizar: "<<endl; if(iteraciones > 0) { cout<<"1. Insertar un elemento"<<endl; cout<<"2. Eliminar un elemento"<<endl; } else { cout<<"1. Insertar un elemento"<<endl; } cin>>opc; system("cls"); switch(opc) { case 1: cout<<"Ingrese el numero que desea insertar: "; cin>>num; //cout<<Obj.getNumber(num); Obj.insertar(num, p); system("cls"); Obj.imprimir(); p++; iteraciones++; break; case 2: cout<<"Ingrese el elemento que desea eliminar: "; cin>>elem; Obj.eliminar(elem); p-=2; system("cls"); Obj.imprimir(); p++; iteraciones++; break; default: cout<<"Opcion invalida!"; break; } getch(); } system("cls"); return 0; }
void check_remover_conjunto() { Conjunto<int> c; c.insertar(2); c.insertar(5); c.remover(2); ASSERT_EQ(c.pertenece(2), false); ASSERT_EQ(c.pertenece(5), true); c.remover(2); c.remover(5); ASSERT_EQ(c.pertenece(2), false); ASSERT_EQ(c.pertenece(5), false); c.insertar(1); c.insertar(2); c.insertar(3); c.insertar(4); c.remover(4); ASSERT_EQ(c.pertenece(1), true); ASSERT_EQ(c.pertenece(2), true); ASSERT_EQ(c.pertenece(3), true); ASSERT_EQ(c.pertenece(4), false); ASSERT_EQ(c.minimo(),1); ASSERT_EQ(c.maximo(),3); }
void check_insertar_conjunto() { Conjunto<int> c; ASSERT_EQ(c.pertenece(1), false); ASSERT_EQ(c.pertenece(2), false); c.insertar(1); ASSERT_EQ(c.pertenece(1), true); ASSERT_EQ(c.pertenece(2), false); c.insertar(2); ASSERT_EQ(c.pertenece(0), false); ASSERT_EQ(c.pertenece(1), true); ASSERT_EQ(c.pertenece(2), true); c.insertar(4); c.insertar(3); c.insertar(5); ASSERT_EQ(c.pertenece(0), false); ASSERT_EQ(c.pertenece(1), true); ASSERT_EQ(c.pertenece(2), true); ASSERT_EQ(c.pertenece(3), true); ASSERT_EQ(c.pertenece(4), true); }