Olá, é meu primeiro post no fórum, não sei se esse é o lugar certo mas era a única parte do fórum que citava ‘problemas com lógica’, caso não seja aqui, informem-me.
Tenho uma dúvida de lógica. Tenho jogado um puzzle para celular chamado Flow. As regras são simples, você tem pares de pontos separados em um campo quadriculado e tem que “ligar” eles dois a dois, até que todos estejam ligados e o campo esteja completamente preenchido.
Aqui tem um exemplo de uma fase solucionada, caso restem dúvidas quanto às regras.
![]()
E a imagem de uma fase ainda não solucionada, o estado inicial.

Minhas dúvidas são as seguintes:
1 - É possível fazer um algoritmo que resolva esse puzzle sem fazer uma busca por soluções? (apenas por lógica)
Faço essa pergunta porque depois de um pouco de prática comecei a pensar em soluções sem fazer tentativas antes, parece ser possível só determinar um movimento obrigatório sem fazer uma busca olhando o contexto global.
2 - Como os desenvolvedores desenvolvem as fases desse tipo de jogo?
Nunca tive contato com desenvolvimento de puzzles mas sempre tive curiosidade de como se estima a complexidade de uma fase na hora do desenvolvimento, já que existem vários níveis de dificuldade. As fases são geradas aleatoriamente e depois classificadas por nível ou existe um padrão que faça a fase ter tal nível de complexidade?
3 - Como se estima a complexidade de um puzzle no geral?
Ao se idealizar um jogo, há premissas que tornem possível aferir a complexidade do jogo? Há algum ponto de partida para estudar esse tipo de problema?
Todos os comentários acerca de lógica em jogos de puzzle são bem vindos, e caso achem que esse post se encaixaria melhor em alguma outra seção ou até algum outro fórum, avisem que eu mudo 
Obrigado.