Algoritmo de permutação

4 respostas
J

Galera estou fazendo um trabalho e estou precisando de uma ajudinha
tenho que desenvolver um algoritmo que leia uma palavra e imprima todas as possibilidades de combinação dessa palavra…
Vou mostrar um exemplo aqui em baixo
tipo

Informe a palavra: abc

o programa deve imprimir:
abc
acb
bac
bca
cab
cba

E tem que ser na linguagem java espero que voces possam me ajudar…
desde ja agradeço!!!

4 Respostas

drsmachado

1 - O tópico foi duplicado
2 - O que você já fez?
3 - Qual a dúvida?
4 - Não achou NADA no http://www.google.com.br ?

L

Já fez algo? ou está no zero?

pois pedir dessa maneira ninguem vai querer dar o codigo prontu neh neguinho! ai tbm é palhaçada! :evil:

J
package permutacao;

import java.util.ArrayList;


public class Permutacao {

    public static void main(String[] args) {
        ArrayList lista = new ArrayList();
        lista.add("1");
        lista.add("2");
        lista.add("3");
        
        ArrayList lpermutada =permuta(lista);
        for (int i=0;i<lpermutada.size();i++){
            String[]teste=(String[])lpermutada.get(i);
            System.out.print("\n");
            for(int j=0;j<teste.length;j++){
                System.out.print(teste[j]);
            }
        }
        System.exit(0);
    }

    private static int fatorial(int num){
        int valor=1;
        for (int i=1;i<=num;i++){
            valor=valor*i;
        }
        return valor;
    }

    private static ArrayList permuta(ArrayList lista){
        ArrayList lperm = new ArrayList();
        ArrayList permutacoes = new ArrayList();
        int n=lista.size();
        int nrPerm=fatorial(n);
        int vaux[]=new int[n-1];
        int posBco[]=new int[n-1];

        for(int i=0;i<n-1;i++){
            vaux[i]=fatorial(n-1-i);
        }
        for(int k=0;k<nrPerm;k++){

            for(int i=0;i<n-1;i++){
                posBco[i]=0;
            }

            int soma_k=k;
            int multiplicando=n-1;
            int indice=0;
            while(soma_k>0){
                int multiplicacao=vaux[indice]*multiplicando;
                if(multiplicacao<=soma_k){
                    soma_k=soma_k-multiplicacao;
                    posBco[indice]=multiplicando;
                    multiplicando=n-1;
                    indice++;
                }else{
                    multiplicando--;
                    if(multiplicando==0){
                        indice++;
                        multiplicando=n-1;
                    }
                }
            }
            lperm.add(posBco.clone());
        }
        //inicia a permutação
        for(int k=0;k<lperm.size();k++){
            int indice=n-1;
            int[]posicoes=(int[])lperm.get(k);
            String [] individuo = new String[n];
            for(int i=0;i<n;i++){
                individuo[i]="";
            }
            int id=0;
            for(int i=0;i<posicoes.length;i++){
                int posicao=posicoes[i];
                int vazio=0;
                while(vazio<posicao){
                    if(individuo[id].equals("")){
                        vazio++;
                    }
                    id++;
                }
                while(individuo[id].equals("")==false){
                    id++;
                }
                individuo[id]=(String)lista.get(indice);
                id=0;
                while(individuo[id].equals("")==false){
                    id++;
                }
                indice--;
            }
            //último
            for(int i=0;i<individuo.length;i++){
                if(individuo[i].equals("")){
                    individuo[i]=(String)lista.get(0);
                }
            }

            permutacoes.add(individuo.clone());
        }
        return permutacoes;
    }

}

Bom o algoritmo eu ja tenho ele aqui a minha duvida agora como faço para inserir os dados, no meu exemplo ja estou iniciando a minha lista com alguns valores
porem quero q esses valores sejam informados pelo usuario.... talvez minha pergunta seja ate boba, mas nao estou muito acostumado a programar em java....
Desde ja agradeço a quem puder ajudar.. Abraço!!!

drsmachado

Visualmente, use o

JOptionPane.showInputDialog("Valor"); Ele retorna uma String.
No console, pesquise sobre a classe Scanner

Criado 31 de maio de 2011
Ultima resposta 31 de mai. de 2011
Respostas 4
Participantes 3