Eu estou tentando gerar aleatoriamente um gráfico direcionado com o objetivo de criar um jogo de quebra-cabeça semelhante aos quebra-cabeças deslizantes de gelo de Pokemon.
Isto é essencialmente o que eu quero ser capaz de gerar aleatoriamente: http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theory .
Preciso limitar o tamanho do gráfico nas dimensões x e y. No exemplo dado no link, ele seria restrito a uma grade 8x4.
O problema que eu estou enfrentando não é gerar o gráfico aleatoriamente, mas gerar um gráfico aleatoriamente, que eu possa mapear corretamente em um espaço 2D, pois preciso de algo (como uma rocha) no lado oposto de um nó, para torná-lo visualmente faz sentido quando você para de deslizar. O problema disso é que, às vezes, a rocha acaba no caminho entre dois outros nós ou possivelmente em outro nó, o que faz com que todo o gráfico seja quebrado.
Depois de discutir o problema com algumas pessoas que conheço, chegamos a algumas conclusões que podem levar a uma solução.
- Incluindo os obstáculos na grade como parte do gráfico ao construí-lo.
- Comece com uma grade totalmente preenchida e apenas desenhe um caminho aleatório e exclua os blocos que farão esse caminho funcionar.
O problema então é descobrir quais excluir, para evitar a introdução de um caminho adicional mais curto. Também estávamos pensando que um algoritmo de programação dinâmica pode ser benéfico, embora nenhum de nós tenha muita habilidade em criar algoritmos de programação dinâmica do nada. Qualquer idéia ou referência sobre como esse problema é chamado oficialmente (se for um problema gráfico oficial) seria muito útil.
Aqui estão alguns exemplos do que consegui até agora, colocando blocos aleatoriamente e gerando o gráfico de navegação a partir do início / término escolhido. A idéia (conforme descrito no link anterior) é começar no verde S e desejar chegar ao verde F. Você faz isso movendo-se para cima / baixo / esquerda / direita e continua na direção escolhida até atingir um parede. Nestas fotos, cinza é uma parede, branco é o chão e a linha roxa é o comprimento mínimo do início ao fim, e as linhas pretas e os pontos cinza representam possíveis caminhos.
Aqui estão alguns exemplos ruins de gráficos gerados aleatoriamente:
Aqui estão alguns bons exemplos de gráficos gerados aleatoriamente (ou ajustados manualmente):
Também pareci notar os mais desafiadores quando, na verdade, jogar isso como um quebra-cabeça são aqueles que possuem muitos nós de alto grau no caminho mínimo.