Jump to content
RVPF

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

Recommended Posts

RVPF

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 :)

Share this post


Link to post
Share on other sites
HappyHippyHippo

estás a falar de matrizes ou vectores ?

qual a gama de valores que as posições da matriz/vector pode tomar.

apresenta um exemplo concreto e completo


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
RVPF

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.

Share this post


Link to post
Share on other sites
HappyHippyHippo

Como disse. Apresenta um caso completo.

Por exemplo, uma matrix 2x3

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
RVPF

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

não vejo relação entre as sequências dadas e a matriz, estás a dizer que os dados da sequência são irrelevantes para a matriz que queres ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.