Dado um conjunto de peças em uma grade, quero determinar:
- Se as peças formarem uma figura fechada
- Se os ladrilhos formarem uma figura fechada quando você contar os lados do quadro como uma aresta da figura
- Se qualquer uma das duas instruções anteriores for verdadeira, quais blocos adicionais caem dentro da figura em anexo, o formulário inicial dos blocos.
O jogador começará pressionando uma peça e arrastando o dedo para outras peças para criar uma cadeia de peças da mesma cor. Vou verificar como vou ver se o próximo bloco é válido. Ex. Se o jogador começa em um azulejo vermelho, sua única próxima jogada válida é uma telha vermelha adjacente (diagonais fazer contagem). Quando o usuário levanta o dedo, preciso verificar os 3 itens acima.
Então, meu pensamento inicial era que, desde que eu estava checando a validade da corrente toda vez que fui, quando o jogador levantou o dedo, eu pude verificar se o primeiro e o último ladrilho eram adjacentes. (Eu já sei que eles são da mesma cor.) Se eles fossem adjacentes, eu tinha um pressentimento de que eu tinha feito uma figura fechada, e eu viria aqui para tentar ver se estava perdendo algo grande e conseguir algum tipo de prova lógica / matemática de que meu palpite estava correto (ou um exemplo provando que está incorreto).
Mas foi aí que pensei no item número 2: também tenho que dar conta de correntes que usam uma borda do quadro como um lado da figura em anexo. Nesse caso, o primeiro e o último item da cadeia não seriam adjacentes, mas eu ainda teria uma figura em anexo. Então agora estou de volta à estaca zero, um pouco.
O que posso fazer com essa cadeia de coordenadas da grade para descobrir se elas formam uma figura fechada ou não? E uma vez que sei que tenho uma figura fechada, qual é a melhor maneira de obter uma lista adicional de todos os blocos que caem dentro de seus limites?
Acima, desenhei o que espero que os 4 resultados possíveis deste teste possam ser.
A corrente não faz uma figura fechada.
A corrente faz uma figura fechada.
Se você contar os lados do quadro como uma aresta (ou mais de uma aresta) da figura, a corrente formará uma figura fechada.
A cadeia cria uma figura em anexo, mas existem pontos de dados extras (selecionados validamente pelo usuário como parte da cadeia) que não fazem parte da figura criada.
O caso 4 é o mais complicado, porque você teria que extrair os elos de corrente "extras" para encontrar a figura fechada e as peças que caem dentro dela (mas não em torno da área "não fechada").
Então ... Alguém tem uma idéia de uma boa maneira de resolver isso, ou apenas um ponto de partida para mim? Estou meio que circulando neste momento e poderia usar outro par de olhos.