Este documento http://www.mountainvistasoft.com/docs/BattleshipsAsDecidabilityProblem.pdf diz que o problema de decisão "Dado um quebra-cabeça específico, existe uma solução?" é NP-completo. Não entendo por que isso não pode ser feito em tempo polinomial. Dadas as restrições de que dois navios não podem ser ortogonais ou diagonalmente adjacentes, por que não criar uma grade com duas vezes mais colunas do que "caixas" com linhas suficientes para colocar um "separador" entre cada navio. Vi a redução demonstrada dessa maneira e parece que isso poderia ser feito em tempo polinomial.