Java HELP

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Java HELP

Mensagempor riapa » Sexta Mar 28, 2008 18:57

Boas!

Já estou a dar em doido :evil: lol
Tenho que resolver um problema que consta no seguinte:
Tenho um campo de tiro (figura) onde foram largadas algumas bombas. Essa bombas produziram crateras (azul na figura), e agora o objectivo é construir 1 pista de aterragem (amarelo na figura) tendo em conta que não pode ser em cima de nenhuma cratera. A figura ilustra o problema:

Imagem

Já tenho o código todo para construir o campo e crateras. Já tenho também um método que me devolve um array de pontos onde são possíveis criar as pistas de aterragem.
Só me falta mesmo é arranjar maneira de descobrir quais são os pontos (que foram devolvidos no array) que permitem construir as maiores pistas como ilustra a figura.

Dêem algumas dicas de como resolver o problema... se calhar devolver os pontos num array não é a melhor solução...

Obrigado! ;)
Ps: em caso de empate de pistas, dá-se preferência à que se encontra mais a sul, no caso das horizontais, e a mais a oeste, nas verticais ;)
Avatar do Utilizador
riapa
Membro Diamante
Membro Diamante
 
Mensagens: 1144
Registado: Terça Jan 03, 2006 18:23

Mensagempor alfatek » Sexta Mar 28, 2008 22:17

Isto é uma questão de usar ciclos e pensar :)

Para descobrir as pistas horizontais:

percorre todas as linhas

para cada linha percorre todos os pontos e descobre a maior pista dessa linha. vai comparando todas as pistas de cada linha e ficas com a maior horizontal.

depois fazes o mesmo para as verticais e no fim comparas c maior horizontal com a maior vertical...


isto são só dicas, vais ter de pensar na solução completa :) Se não conseguires, tenta partir o problema em pedaços e ir resolvendo pouco a pouco
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra

Mensagempor alexin » Segunda Mar 31, 2008 22:51

Divide o problema em linhas horizontais e verticais.

Para a horizontal, "junta" todos os pontos que tiverem a componente vertical igual. Desses, faz um ciclo que termina quando a componente horizontal de cada um, sucessivamente, for diferente da do (?) anterior.

Para a vertical a solução é análoga.

Haverá outras soluções, quiçá melhores, mas isto é assim de repente.
alexin
Aprendiz
Aprendiz
 
Mensagens: 40
Registado: Domingo Mar 09, 2008 18:38

Mensagempor Fenrir » Segunda Abr 07, 2008 9:57

Tens uma matriz (array de arrays) com os valores dos objectos?

Por exemplo 1 se for cratera, 0 se nao for?

Se tiveres uma matriz é só percorrer a matriz, e implementar as regras que enuncias.

Cumps.
Avatar do Utilizador
Fenrir
Membro de Prata
Membro de Prata
 
Mensagens: 354
Registado: Segunda Set 20, 2004 22:33
Localização: Porto

Mensagempor riapa » Segunda Abr 07, 2008 14:11

Ya foi assim que fiz, através de uma matriz...
Obrigado a todos! ;)
Avatar do Utilizador
riapa
Membro Diamante
Membro Diamante
 
Mensagens: 1144
Registado: Terça Jan 03, 2006 18:23


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron