Seja uma matriz . Dizemos que duas entradas são vizinhas se forem adjacentes na horizontal ou na vertical, e ambas as entradas são 1 's. Quer-se encontrar o número mínimo de 1 para adicionar, para que cada 1 possa alcançar outro através de uma sequência de vizinhos.
Exemplo:
100
000
001
Aqui temos 3 's:
100
100
111
Como podemos encontrar com eficiência o número mínimo de para adicionar e onde?
algorithms
graph-theory
matrices
Chao Xu
fonte
fonte
Respostas:
Se você modelar seu problema com gráficos, seu problema é como o problema da Steiner Tree :
Veja aqui a definição mais simples possível.
Como você pode ver, é o NPC em geral, mas, no seu caso, seu gráfico é um gráfico de grade, pode ser que você possa encontrar uma boa solução para isso, mas para o seu exemplo atual (quando os terminais estão no limite), você pode ver a árvore Steiner no papel de gráficos de grade .
De qualquer forma, existem excelentes heurísticas para o problema do Steiner Tree, você pode aplicar uma abordagem semelhante ao seu problema.
PS: Você pode assumir que os vizinhos 1s são nós conectados; depois disso, você pode contratar as arestas para criar um novo gráfico, o novo gráfico criado é plano e, se você puder resolver a Árvore Steiner, poderá resolver seu problema, mas pode ser: existe uma boa solução para o seu problema, independente da Steiner Tree.
fonte