//Leandro Teófilo - RA134064 //Teoria dos Grafos - MO405 //Pruf Code #include #include #include #include using namespace std; typedef vector VInt; typedef vector VVInt; typedef vector VBool; VVInt mat_adj,lista_adj; VInt set_dgree,pruf_code; //------------------------------------------------------------------------------------------- /*Função que gera a lista de adjacencias, a partir da matriz de adjacencia*/ void gera_lista(VVInt mat,int nvert) { lista_adj = VVInt(nvert, VInt()); int m,n; for(m=0;m0) { printf("%d: ",m+1); for(cont=0;contnum_ver); do { printf("\nAresta %d - V2: ",x+1); scanf("%d",&v); }while(v<1 || v>num_ver || v==u); mat_adj[u-1][v-1]=mat_adj[v-1][u-1]=1; //Vai inserindo 1 nas posicoes onde os vertices sao adjacentes set_dgree[u-1]++; //Incrementa o grau do vertice u set_dgree[v-1]++; //Incrementa o grau do vertice v } } //----------------------------------------------------------------------------------------------- int main(){ int cont,nver,vizinho,m; VInt::iterator it,it2; while(1) { int num_arestas; VInt pruf_code=VInt(); printf("\nDigite o numero de vertices da arvore: "); scanf("%d", &nver); le_arvore(nver);//Chama a funcao para gerar o grafo com a arvore, criando assim a matriz de adjacencias gera_lista(mat_adj,nver);//Gera a mat. de incidencias a partir da matriz de adjacencias //-------------------------------------------------------------------------------------------------------- printf("\n\n\nLista de ADJACENCIAS (Antes da geracao do Pruf Code)\n\n"); print_ladj(lista_adj,nver);//Imprimindo a lista de ADJACENCIAS da arvore inicial printf("\nMatriz de ADJACENCIAS (Antes da geracao do Pruf Code)\n\n"); print_madj(mat_adj,nver); //Imprimindo MATRIZ DE ADJACENCIAS inicial //---------------------------------------------------------------- for(cont=0;cont1) vizinho=it2-set_dgree.begin(); else it2++; } pruf_code.push_back(vizinho); //Adiciona o vizinho da folha de menor valor ao Pruf Code mat_adj[m][vizinho]=0; mat_adj[vizinho][m]=0; set_dgree[vizinho]--; //Diminui o grau do vizinho set_dgree[m]--; //Diminui o grau da folha m=0; /*Reinicializa m c/valor inicial, para que novamente a busca se inicie a partir do vertice de menor valor, pois agora podem ter surgido novas folhas*/ cont++; //Incrementa cont, para o controle do total de itens no Pruf Code } } } gera_lista(mat_adj,nver); //Gera a nova Lista de Adjacencias, com base na Matriz de adjacencias atualizada. //----------------------------------------------------------------------------------------------------------------------------------- printf("\nLista de ADJACENCIAS (Depois da geracao do Pruf Code)\n\n"); print_ladj(lista_adj,nver);//Imprimindo a matriz de incidencia da arvore printf("\nMatriz de ADJACENCIAS (Depois da geracao do Pruf Code)\n\n"); print_madj(mat_adj,nver); //Imprimindo MATRIZ DE ADJACENCIAS print_code(pruf_code); //Imprimindo o Pruf Code printf("\n\n"); //-------------------------------------------------------- } }