Exercicio pra facu, alguem tem uma ideia melhor?

4 respostas
K

O problema:

O objetivo deste trabalho é escolher um caminho que contenha 32 cidades de forma que o caminho percorrido seja o menor possível. O caminho não pode ter cidade alguma repetida. Após as implementações responda as seguintes perguntas:

a-Existe algum caminho com percurso menor que 4000?
b-Existe algum caminho com percurso menor que 3000?
c-Qual o menor caminho encontrado?
d-Qual método encontra o melhor caminho?
e-Qual método encontra uma solução mais rapidamente?
f-Quais são as variáveis e as restrições deste problema?

Parte 1

O seu programa deve escolher, randomicamente, 32 pontos em um quadrado de 1000 por 1000. Note que é possível ir de um ponto a qualquer outro ponto dentro do quadrado diretamente, a não ser que exista um outro ponto na mesma linha.
Implemente uma solução utilizando uma estratégia gulosa. Inicie de um ponto qualquer e, a partir deste ponto, selecione o próximo ponto como sendo aquele mais próximo ao ponto atual.

Minha solução:

Criar uma classe ponto, com X e Y de argumentos, eles recebem um N° random de 1000, ai teria um pto num quadrado 1000x1000. Guardaria eles em algum lugar (onde?), e depois por uma formula acharia distancia entre os ptos.
O foda e ver se existe um pto no meio de uma reta, isso eu não tenho nem ideia de como fazer.

Alguem tem uma ideia melhor

4 Respostas

agodinho

matemática pura (vê os conceitos primeiro, só depois parte pro código)

dá uma olhada em:
http://www.mat.ufrgs.br/~portosil/caixeiro.html
(caixeiro viajante)

Woody

K

no conceito eu me viro, meu problema é codigo, a idéia da classe pto e de uma classe reta pra ver distancia entre ptos e distancia do pto a reta.

Tava vcendo se alguem tinha uma ideia melhor

K

Show de bola

A

Tive a seguinte ideia:

1 - Usar a classe Point do pacote java.awt.geom.*; Essa classe já possui os atributos x e y.

2 - Criar um array de 32 posições de objetos Point que serão instanciados Randomicamente. Isso responde a sua pergunta de onde salvar tantos objetos.

3 - Escolher randomicamente um dos 32 objetos desse array para determinar o ponto de partida.

4 - A partir desse ponto de partida verificar entre os outros 31 pontos qual o mais proximo e calcula-se a distância entre os dois. Então se excluiria o ponto de partida, pois é um ponto por onde já se passou.

5 - A partir dai o processo se repete. Determina entre os pontos restantes o ponto mais próximo do segundo ponto selecionado e em seguida exclui o mesmo.

Acho que esse é o principal problema. Conseguindo fazer isso passa-se para os itens a, b e c que serão mais simples.

Espero ter te ajudado.

Criado 30 de março de 2006
Ultima resposta 31 de mar. de 2006
Respostas 4
Participantes 3