Ejemplo n.º 1
0
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;
}