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
por riapa » Sexta Mar 28, 2008 18:57
Boas!
Já estou a dar em doido

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

-

riapa
- Membro Diamante

-
- Mensagens: 1144
- Registado: Terça Jan 03, 2006 18:23
por 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

-
- Mensagens: 3257
- Registado: Sábado Abr 06, 2002 18:28
- Localização: Coimbra
-
por 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

-
- Mensagens: 40
- Registado: Domingo Mar 09, 2008 18:38
por 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.
-

Fenrir
- Membro de Prata

-
- Mensagens: 354
- Registado: Segunda Set 20, 2004 22:33
- Localização: Porto
por riapa » Segunda Abr 07, 2008 14:11
Ya foi assim que fiz, através de uma matriz...
Obrigado a todos!

-

riapa
- 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