void transferir (int n, int origen, int destino, int otro) { if (n > 0) { transferir (n - 1, origen, otro, destino); moverdisco (origen, destino); transferir (n - 1, otro, destino, origen); } }
int main() { int m,n,q,x,y,i; Par *inicio = NULL,*fim; Arv *inicioArv = NULL; bool simetria; printf("Informe numero minimo:"); scanf("%d",&m); if(m >= 0){ //verifica se o numero minimo é positivo printf("Informe o numero maximo:"); scanf("%d",&n); if(n <= 100){ n++; if(n-m > 0){ //verifica se o intervalo contém algum elemento printf("Informe o numero de elementos a serem gerados: "); scanf("%d",&q); if(((n-m)*(n-m)) >= q){ //verifica se o numero de pares a serem gerados é menor ou igual aos pares disponiveis no intervalo srand(time(NULL)); //inicializar a função rand -> seed rand for(i=0;i<q;i++){ //repete as instruções abaixo por q vezes, definido pelo usuário x = aleatorio(m,n); //criar um numero aleatório, entre m e n, definidos pelo usuário. y = aleatorio(m,n); if(!(repetido(inicio,x,y))){ //inserir os elementos enquanto não há pares repetidos inserir(&inicio,&fim,x,y); //insere o par em uma estrutura dinâmica }else{ i--; //retroceder no loop for e gerar novo par, caso haja um par repetido } } imprimir(inicio); //imprime todos os pares ordenados simetria = Simetrico(inicio); printf("\n%d\n",simetria);// Nao Simetrico.Vai imprimir a ordem simetrica das coordenadas. if(!(simetria)){// se Simetria nao for verdadeiro ou seja se retornar valor 0 ele entra na condicao. getch(); transferir(inicio,&inicioArv);// vai transferir os itens da lista para a estrutura arvore e ordenar. imprimirArv(inicioArv); } }else{ printf("Nao existem pares suficientes no intervalo escolhido.\n"); } }else{ printf("Intervalo Invalido.\n"); } }else{ printf("Limite superior maximo: 100\n"); } }else{ printf("Numero Invalido.\n"); } return 0; }