abrePosição

abrePosição

por Luiz Carlos de Jesus Junior -
Número de respostas: 11
Srs,

Aguém pode me dar alguma dica de como fazer a função?!?

Tentei já a um bom tempo, mas não tive muitos resultados....

Obrigado!
Em resposta à Luiz Carlos de Jesus Junior

Re: abrePosição

por Carlos Hitoshi Morimoto -
Aqui vai uma pseudo solucao possivel:

Para abrir uma posição:
Se a posição ti
ver bomba : BUM!;
senao se a posicao tiver ao menos uma bomba: basta "abrir" a posicao;
senao (quer dizer que tem zero bombas): "abra" todos os vizinhos.

O "abra" já é uma definição recursiva, ou seja, chame a mesma função
para todos os vizinhos. So tome cuidado para nao sair da matriz, ou seja,
acessar posições ilegais. Basta escrever isso em C.
ht

Em resposta à Carlos Hitoshi Morimoto

Re: abrePosição

por Tatiane Casanova Penteado -
O que eu não entendo nessa função é como vou retornar o N (número de casas abertas - sem ser uma variável global) se estou chamando a função recursivamente?!
Em resposta à Carlos Hitoshi Morimoto

Re: abrePosição

por Bruno Pfefferkorn -

Tá bem difícil encontrar uma solução para essa função. Acho que o resto do programa vai sair como corolário... :p

O meu problema (dúvida) é: Se a posição contiver um Zero, ela deve abrir os zeros vizinhos. Tudo bem. Mas o "Zero vizinho" do zero inicial vai passar pela mesma função, portanto o "zero vizinho" se torna o "zero inicial" agora. Mas acontece que o antigo "zero inicial" se tornou um novo "zero vizinho", logo, a função se torna cíclica e nunca vai haver um retorno. Diante disso, eu tentei mudar a matriz, ou seja, quando eu achasse um zero, atribuiria o caracter 'z' à posição. Mas continua não dando certo... =\

Mto confuso? Concordo. Professor, mais dicas viriam a calhar ;) .

Bruno Pfefferkorn

Em resposta à Bruno Pfefferkorn

Re: abrePosição

por Luiz Carlos de Jesus Junior -
Pois é cara....
Antes de colocar minha dúvida aqui, estava (e estou) com o mesmo problema.

Fica de uma forma tal que você perde a informação "antiga" e não tem como voltar para o passo inicial....

MAIS DICAS POR FAVOR!!!
Em resposta à Luiz Carlos de Jesus Junior

Re: abrePosição

por Carlos Hitoshi Morimoto -
olas,
em programação, ou na resolução de problemas, você precisa "inventar" a estrutura de dados que te permita resolver o problema. Para avançar um pouco, tente definir o que você precisa de informação para resolver o problema. No caso, me parece que você precisa saber quais as posições que já estão abertas, para não abri-las novamente. Essa info vc já tem em algum lugar. basta utiliza-la em seu programa.
ht

Em resposta à Carlos Hitoshi Morimoto

Re: abrePosição

por Bruno Pfefferkorn -

no caso, as informações de que preciso são as posições que já foram abertas... no caso, foram os zeros que já foram abertos, certo? De alguma forma, essa minha função atribui um 'z' no lugar onde o 0 já foi lido, mas o problema é que eu não pensei em nenhum critério quando escrevi

N = N + abrePosicao(nL, nC, Bombas, (lin + i), (col + j)) + 1;

na função adiante, pois, após pensar em muitas soluções que não deram certo, apenas fui chutando atribuições... :p (é o desespero)..

PEDAÇO DE CÓDIGO APAGADO.

Eu não sei onde usar a recursão, já que eu já sei que posso mudar os valores da matriz Bombas para que não conte o 0 novamente. Não consigo enxergar o 'caso mais simples'.

e além disso, outra dúvida. para abrir as vizinhanças desses zeros, ou seja, os números diferentes de zero que os cercam, eu devo usar a mesma recursão de antes? ou eu posso fazer isso depois que eu já contei os zeros?

(Editado por Carlos Hitoshi Morimoto - quarta, 5 setembro 2007, 20:54)

Em resposta à Bruno Pfefferkorn

Re: abrePosição

por Carlos Hitoshi Morimoto -
Escrever código é a pior forma de resolver o seu problema. Procure definir a função de algumas formas (ou seja, escreva o que ela precisa fazer, mas nao em C), e veja qual definição ela se torna recursiva. Ai sim a gente implementa.
ht


Em resposta à Carlos Hitoshi Morimoto

Re: abrePosição

por Bruno Pfefferkorn -

Consegui!

Obrigado professor! De tanto pensar no código, eu me esqueci que devemos pensar no problema primeiro. fazendo isso eu percebi o erro esdrúxulo que eu estava cometendo... hehe

Obrigado

abraços!