Jump to content

Combinações possíveis de uma matriz (permutações)


Recommended Posts

Posted

Boas pessoal,

mais uma vez preciso da vossa ajuda, tenho uma matriz com varias sequências de movimentos e precisava de fazer as combinações / permutações possíveis entre elas, por exemplo:

12

21

11

22

Já criei uma matriz com o tamanho das permutações para as guardar mas não consigo fazer as permutações e guardar na matriz, encontrei um código que funciona com uma string mas não consigo fazer com matrizes.

#include <stdio.h>
#include <math.h>
int main()
{
 char seq[]="01";
 int n=2, m=3;
 char res[8][4];
 int i, j, k;
 for(i=0; i<=pow(n, m)-1; i++)
 {
   k=i;
   for(j=0; j<=m-1; j++)
   {
  res[i][j]=seq[k%n];
  k=k/n;
   }
 }
 for(i=0; i<pow(n,m); i++)
 {
   res[i][m]=0;
   puts(res[i]);
 }
 return 0;
}
Obrigado 🙂
Posted

Matrizes, uma matriz bidimensional que pode ter qualquer tamanho.

Eu já criei uma matriz para as permutações que calcula as permutações possíveis para uma sequência de x numeros.

Função que cria a matriz permutações:

void** criarMatrizInteiros(int linhas, int colunas)
{
int** ppTabuleiro = NULL;
ppTabuleiro =(int**) malloc(sizeof(int*) * linhas);
int auxLinhas=0, auxColunas=0;
for (auxLinhas = 0; auxLinhas < linhas; auxLinhas++)
{
 *(ppTabuleiro+auxLinhas)=(int*)malloc(colunas*sizeof(int));
 for(auxColunas=0; auxColunas<colunas; auxColunas++)
 {
	 *(*(ppTabuleiro+auxLinhas)+auxColunas)=' ';
 }
}
return ppTabuleiro;
}

Função que calcula quantas permutações são possiveis para x de valor j tamanho:

int numeroCombinacoes(int p) /// so indica quantas permutacoes sao possiveis para um conjunto de n caracteres
{
int i, j, k;
for(i=0; i<=pow(2, p)-1; i++)/// o comando pow serve para calcula a base elevada a uma potencia sendo 2 a base e p a potencia
{
 k=i;
 for(j=0; j<=p-1; j++)
 {
	 k=k/2;
 }
}
return i;
}

Aqui é onde tudo fica preto, tentei passar o código acima para funcionar com matrizes, passando uma linha da matriz para uma string, fazer as permutações e depois inserir os resultados na matriz de permutações:

int** preenchaerPremutacoes(int** ppPermutacoes, int** sequencias, int n, int m)
{
int linhas=0, colunas=0 ,i, j, k,x=0;
int sequencia[m*n];
n=n+n;
printf("\n p = %d",n);
for(linhas=0; linhas<m; linhas++)
{
 for(colunas=0; colunas<n; colunas++)
 {
	 sequencia[x]=sequencias[linhas][colunas];
	 x++;
 }
 printf("X = %d",x);
}
system("PAUSE");
for(i=0; i<=pow(n, 2)-1; i++)
{
 k=i;
 for(j=0; j<=m-1; j++)
 {
	 ppPermutacoes[i][j]=sequencia[k%n];
	 k=k/n;
 }
}
return ppPermutacoes;
}

Espero ter conseguido explicar melhor, obrigado.

Posted (edited)

Boas,

parece que eu estava a perceber mal o exercício (talvez explique a minha dificuldade em me explicar), mas o que realmente preciso de fazer também me causa problemas, eu tenho uma matriz de sequencias de movimentos e tenhos que as organizar de varias maneiras, por exemplo:

Quantas Sequências pretende fazer: 3

Insira a sequencia 1: 0003690

Insira a sequencia 2: 0603006

Insira a sequencia 3: 09036

Agora que sei quantas sequências são tenho de fazer as combinações para 3 algarismos para dentro de uma matriz:

012

021

102

120

201

210

mas se forem 4 sequências tenho de gerar uma matriz com as combinações de 0 a 3

Estas combinações são para depois executar as sequências por essas ordens testando assim os caminhos.

Obrigado pela ajuda

Edited by RVPF

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.