Estou procurando um bom algoritmo para o seguinte problema: Dada uma grade 3D de voxels (que podem estar vazios ou preenchidos), se eu escolher dois voxels não adjacentes, quero saber se eles estão conectados um ao outro por outros voxels.
Por exemplo (para ilustrar a situação em 2D), em que # é um quadrado preenchido:
1 2 3
a # # #
b # #
c # # #
Se eu escolher a3 e c3, quero determinar o mais rápido possível se eles estão conectados; se houver um caminho entre a3 e c3 através dos pixels preenchidos. (A situação real está em uma grade de voxel 3D, é claro.)
Analisei algoritmos de preenchimento de inundação e de localização de caminhos, mas não tenho certeza de qual escolher. Ambos fazem um trabalho desnecessário: o preenchimento de inundação tenta preencher todos os voxels, mas isso não é necessário. Os algoritmos de localização de caminhos geralmente se preocupam em encontrar o caminho mais curto, o que também não é necessário. Eu só preciso saber se há é um caminho.
Qual algoritmo devo usar?
Editar: com base nos comentários, acho que deve adicionar o seguinte: o conteúdo dos voxels não é conhecido antecipadamente e também o algoritmo é necessário para detectar se a remoção (esvaziamento) de um voxel faria com que o grupo de voxels quebrasse em dois ou mais grupos menores.
c3->c2->b2->a2->a3
:?