Beau problème!
Comme @qwertyman a remarqué, le problème est de trouver un minimum de vertice coupure entre "intérieur" des cellules et des limites de la grille. S'il est imaginable que ce problème particulier sur une grille pourrait avoir une solution plus facile, je ne pense pas que tout les autres solutions de résoudre le problème dans tous les cas.
Les cellules sur place des grilles peut être considérée comme ayant jusqu'à quatre ou à huit voisins (@tobias_k et @hidefromkgb). Si l'on fait abstraction de l'existant (gratuit) cellules de la paroi, voici ce que typique des clôtures sur les 4 - et 8-grilles:
Pas que dans les deux cas, il y a beaucoup plus minime des clôtures, mais ces rectangulaires et octogonales les cases sont à la fois minimal et facile à trouver. En outre, ils sont minimes clôtures avec le maximum d'espace intérieur.
Il y a deux complications: sans pré-existantes, les cellules de la paroi, et la possibilité que de multiples petites clôture composants sont moins cher que le gros de la boîte englobante.
Les deux complications sont bien résolus en un minimum de vertice couper problème; pré-existantes, les cellules de la paroi peut juste être supprimé à partir du graphique (et à l'intérieur des cellules peut être fusionné avec d'autres, connecté intérieur des cellules, laissant seulement une cellule interne pour chaque composante connexe de cellules intérieures). Malheureusement, un minimum de coupes sont généralement considérés comme le retrait des bords plutôt que des sommets!
Je doute qu'aucun algorithme sera plus facile que la mise en œuvre d'un chiffon propre vertice coupe de l'algorithme. Voici ce à quoi nous sommes confrontés:
Dans cet exemple, quatre petites clôtures sont moins cher que grand, mais qui dépend des proportions exactes. Nous pourrions commencer par une grande clôture et essayer de l'améliorer par la division, à l'instar de @LazyMammal n', ou avec de l'escrime chaque composant séparément, mais dans les deux cas, ces situations ne sont pas triviales.
Celui-ci est trop problématique:
Doit-on utiliser le grand gratuit clôture segment? Doit-on clôture de chaque petit point séparément? Nous utilisons trois moyen de clôtures? Peu importe si nous sommes de plus en grand et se divisent, comme @LazyMammal n', ou de commencer avec chacun des boîtes englobantes et se joindre à eux, ces situations semblent présenter les mêmes problèmes que le général minimum de coupes de problèmes.
Si vous êtes d'accord avec les approximations de solutions optimales, ou peut-être vous limiter à des cas sur 50 par 50 grilles et peut rapidement éliminer ces complications, peut-être il ya quelque chose de facile et rapide? Je ne sais pas.
Pour un connectés ensemble G des cellules intérieures, de trouver une moins chère clôture, fonctionnent comme ceci:
Trouver un plus court "flux" chemin d'accès de FL de cellules vides de ce groupe à la frontière.
Trouver un moins cher "clôture" chemin de FE dans l'ensemble du groupe à l'aide de toutes les cellules ne sont pas dans le G ou FL. Essayez chaque cellule de la FL en tant que point de départ, ou n'importe quelle cellule qui est à la fois en floride et en G du grillage. Le coût de cellules vides est 1, le coût des cellules de la paroi est de 0, et le coût de l'intérieur les cellules ne sont pas dans G est de 0. Vous aurez à couper la grille le long de FL pour s'assurer FE tourne autour de G.
(Mais je ne sais pas comment combler les lacunes de l'un des groupes afin de connecter l'ensemble de ses cellules en présence de cellules de la paroi.)
Alors peut-être que la vraie question est de savoir lequel des cellules intérieures de clôture ensemble? Connecté cellules intérieures doivent rester en contact, d'accord. En outre, si minime clôtures toucher, de rejoindre leurs groupes. Autres que que, approximatif, juste en essayant différentes combinaisons?
Je ne sais pas; je crois que le problème sur de grandes grilles présente les mêmes complications et de la complexité que le général minimale de la coupe des problèmes - donc, si vous avez vraiment besoin d'optimalité, résoudre les ceux qui.
Pertinentes: https://cstheory.stackexchange.com/questions/2877/ (merci qwertyman), https://en.wikipedia.org/wiki/Vertex_separator avec une notion différente de la "minimale" des séparateurs.