Ir para o conteúdo
vrael

Rodar matriz

Mensagens Recomendadas

vrael    0
vrael

Boa tarde,

Tenho de fazer um programa que funciona com matrizes. Até aí tudo bem.. Mas há uma parte que eu não consigo pôr a funcionar

1 0 7

2 X 6

3 4 5

Eu estou em X e decido ir para 2. Por exemplo. A matriz altera-se para:

7 6 5

0 X 4

1 2 3

Se fosse para bloquear a matriz de cima o programa era acessível mas eu não faço a minima ideia como ponho a matriz a alterar-se conforme o numero escolhido. Alguém me pode dar umas dicas?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1134
HappyHippyHippo

a tua pergunta é muito estranha ... confirma-me só isto ... a tua duvida é como "rodar" os valores das posições exteriores da matrix ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vrael    0
vrael

Exactamente. Mas a matriz pode rodar para qualquer sentido. Neste caso foi a rotação para a posição 2. Mas podia ser para qualquer outro sentido.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vrael    0
vrael

5 4 3

6 X 2

7 0 1

Isto é como se fosse um carro e a frente é o 0. E sempre que escolhe uma posição a frente vira para essa posição.

Estive a analisar o teu algoritmo para o cubo de rubick e nao dá. Porque nem sempre faz rotação de 90º. Outro exemplo

ESCOLHE 1, output:

     

4 3 2

5 X 1

6 7 0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

E para que é que queres isso? É só para mostrar o desenho ou tem alguma outra utilidade?

Pergunto porque a forma de representar internamente pode variar muito consoante o uso desejado ...

Para mostrar o desenho (e outros usos) basta-te saber a posição do 0, e quando alteras alteras a posição basta-te alterar uma variável.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vrael    0
vrael

Basicamente se eu escolher um numero. O zero fica na posição desse número e todos os outros números se alteram.

É um carro que vai virando conforme os dados que lhe forem dando

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vrael    0
vrael

Eu codifiquei fixa


]0 [x][y+1]
1 [x-1][y+1]
2 [x-1][y]
3 [x-1][y-1]
4 [x][y-1]
5 [x+1][y-1]
6 [x+1][y]
7 [x+1][y+1]

mas ela tem de rodar --'

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1134
HappyHippyHippo

ok ... tens então:

int matix[3][3];

a maneira mais fácil é fazeres assim:

crias uma função que rodas todos os numero uma única casa no sentido contrário dos ponteiros do relógio

quando escolhes a direcção a rodar

- ler qual o número guardado nessa direcção

- chamas a função de rodar a matrix esse número de vezes

claro que não te dá uma solução directa, mas em termos de código é de fácil implementação e compreenção

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Por [ x ][ y ] queres dizer [ 1 ][ 1 ], certo?

Eu acho que podias pensar noutro tipo de representação, independentemente da forma como o utilizador interage com a matriz.

Defines 2 matrizes:

int rot_cw[9] = { 3, 0, 1, 6, 4, 2, 7, 8, 5 }; // CW
int rot_ccw[9] = { 1, 2, 5, 0, 4, 8, 3, 6, 7 }; // CCW

int new_matrix[3][3];

for (i = 0; i < 9; i++) {
    if (CW) // clockwise
        new_matrix[i] = old_matrix[rot_cw[i]];
    else // if CCW -> counter clockwise
        new_matrix[i] = old_matrix[rot_ccw[i]];
}

Só tens que interpretar o movimento que o utilizador quer fazer de outra forma e aplicar esta transformação 1 ou mais vezes consoante a acção.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brunoais    69
brunoais

Hum... Pq n usar só 1 matriz?

Para:

0  1  2

7  X  3

6  5  4

{0,1,2,3,4,5,6,7}

Para:

1  2  3

0  X  4

7  6  5

{1,2,3,4,5,6,7,0}

É muito simples e é só rodar no próprio array :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Por acaso nem reparei que o array estava ordenado. Pensei que os números à volta do X pudessem ser colocados aleatoriamente. Nesse caso essa sugestão ainda faz mais sentido que a minha :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade