Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ripper

Problema com matriz

Recommended Posts

Faça um programa em C que dada uma matriz 10 por 10, essa matriz deverá ser preenchida com números de 1 a 100, de acordo com a seguinte regra: é escolhida uma célula arbitrária da matriz, que será preenchida com o número 1. A próxima célula, a ser preenchida com o número 2 deverá ser

uma célula vizinha a célula preenchida com o número 1. A célula a ser preenchida com o número 3 deverá ser vizinha a célula preenchida com o número 2 e assim por diante. Se por exemplo o programa tiver que colocar o número 18 em uma célula vizinha ao número 17, mas todas as células

vizinhas ao número 17 já estão preenchidas, o programa deve tentar colocar o número 18 vizinho ao número 16, ou seja, ele deve ir voltando até encontrar uma célula vazia vizinha a um número anterior. No final, o programa deve mostrar como ficou a matriz preenchida.

 

Alguém tem alguma idéia ?

 

Ninguém tem uma ideia para eu começar :( . Fiz alguma coisa mas acho que ta um lixo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A norma é não fazer as provas/exercícios/trabalhos dos outros. Poste o que você já fez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A norma é não fazer as provas/exercícios/trabalhos dos outros. Poste o que você já fez.

 

La vai:

 

 #include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(){

 int a;
 int b;
 int c;
 int i, j;
 int d[100], e[100]; //vetores para armazenar a linha e a coluna resp.
 int m[10][10];      //matriz a ser preenchida

 srand(time(NULL));

 a=(rand()%10);   //sorteio da linha da primeira celula
 b=(rand()%10);   //sorteio da coluna de primeira celula

  for(i=0;i<3;i++)
  for(j=0;j<3;j++){
  m[i][j]=0;
  }

  printf("%d %d\n",a,B);   //teste para ver quais numeros sairam
 
  m[a][b]=1; //condicao da questao
  c=1;
  d[0]=a;
  e[0]=b;
                                         //fiz o teste com 1 numero alem do inicial
  d[1]=rand()%(d[0]+2);                 //Aqui eu queria fazer o seguinte: fazer o sorteio baseado no numero anterior
  if(d[1]<d[0]-1) d[1]=rand()%(d[0]+2); //EX: se a=3 e b=4 faz-se o sorteio da proxima linha com o resto de 5 e da proxima
  e[1]=rand()%(e[0]+2);                 // e o da proxima coluna com resto de 6. Assim pego o vizinhos da celula 3,4. 
  if(e[1]<e[0]-1) e[1]=rand()%(e[0]+2); // Caso eu obtenha algum numero menor que 2 (que nao inclui os vizinhos da celula
                                     //3,4) o numero deve ser sorteado de novo. Mesma coisa para a coluna
  printf("%d %d \n",d[1],e[1]);      //Mas ocorre casos em que obtenho numeros "proibidos". O que fazer ?


 return 0;
}

//Ainda resta verificar se os vizinhos estão sendo usados. Um veterano da faculdade sugeriu usar uma pilha para fazer isso
//Ainda não estudei isso mas posso dar uma olhada e queria uma dica sobre isso se possível

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.