n2wb1e Posted May 30, 2012 at 08:05 PM Report #459254 Posted May 30, 2012 at 08:05 PM (edited) Boas pessoal eu tenho o seguinte codigo: #include <stdio.h> #define MAX 100 int ler(int *v) { int n, i; printf("Insira o valor pretendido:\n"); scanf("%d", &n); for (i = 0; i < n; i++) v[i] = i + 1; return n; } void mostrar(int *v, int size) { int i; if (v != 0){ for (i = 0; i < size; i++){ printf("%4d", v[i]); } printf("\n"); } void permutar(int *v, int inicio, int n) { int i, temp; if (inicio == n-1){ mostrar(v,n); } else{ for (i = inicio; i < n; i++){ temp = v[i]; v[i] = v[inicio]; v[inicio] = temp; permutar(v, inicio+1, n); v[inicio] = v[i]; v[i] = temp; } } main() { int v[MAX], j; j = ler(v); permutar(v, 0, j); } Ele funciona perfeitamente so que não mostra as permutações por ordem lexicográfica. Exemplo: 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 3 1 2 O 3 1 2 devia estar antes do 3 2 1. Alguem tem alguma sugestão? Desde ja obrigado Edited May 30, 2012 at 08:28 PM by Baderous geshi
pmg Posted May 30, 2012 at 09:16 PM Report #459274 Posted May 30, 2012 at 09:16 PM Ora bem ... A tua funcao recursiva, basicamente, diz o seguinte: a) as permutacoes dum array com 1 elemento a tratar é o proprio array b) as permutacoes dum array com 2 ou mais elementos a tratar sao as permutacoes do array original sem o elemento original em que esse elemento original é substituido para cada elemento restante. Ou seja: as permutacoes do array [1 2 3] sao as permutacoes comecadas com 1 do array [2 3] mais as permutacoes comecadas com 2 do array [1 3] (troca do 2 e do 1) mais as permutacoes comecadas com 3 do array [2 1] (troca do 3 e do 1) Se queres ordem lexicografica, tenta ordenar cada sub array de cada vez que entras na funcao permutar What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
n2wb1e Posted May 31, 2012 at 09:52 PM Author Report #459590 Posted May 31, 2012 at 09:52 PM Ja consigo resolver o problema. Podem fechar.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now