je pensais à ce problème depuis deux jours et n'a pas trouvé une résolution possible:Trouver connectés éléments distincts dans un tableau à deux dimensions
J'ai un tableau à deux dimensions et que vous voulez trouver le plus grand nombre d'éléments sont connectés (horizontal et vertical, pas en diagonale) mais aucun élément de ce groupe ne doit être dupliqué.
Exemples pour les groupes possibles:
--FG- or -F--- or -----
--E-- -E--- ---AF
-BC-- CBD-- ----B
-AD-- -A--- --CDE
Ceci est une vue simplifiée de mon problème parce que dans la « réalité » du tableau est 6x9 et il y a trois types différents de « éléments » (LETS dire les chiffres, les lettres et symboles) avec 30 éléments distincts distincts et un élément vide (-). Dans la première passe, je vérifie chaque position et trouve tous les éléments connectés des mêmes éléments. Cela a été relativement facile à réaliser avec une fonction récursive, le 0,0 champ est en bas à gauche (une autre vue simplifiée):
12AB-1- The check for -AB----
23CD23- position 2:0 -CD----
2*CE55- ("C") would --CE---
#2E2*AA result in --E----
#$A23BC this: --A----
$$F1+*E --F----
21C31*2 --C----
La vérification de la position 2: 0 « C » entraînerait un tableau 10 éléments "lettre" connectés. Maintenant, je recherche le plus grand nombre d'éléments connectés dans ce nouveau tableau qui sont distincts, de sorte que ne sont pas deux éléments en double dans le nouveau groupe. Pour la position 2: 0 cela aboutirait à 4 objets distincts maximum connectés, car vous ne pouvez pas atteindre un autre objet sans toucher à un objet qui est déjà dans le groupe (ici un autre C).
Pour mon problème, il suffit de détecter max. 6 éléments connectés différents dans le groupe 10 éléments.
Un groupe possible pour l'exemple ci-dessus serait (quand je vérifie la position 2: 1 « F »):
--B----
--D----
--C----
--E----
--A----
--F----
-------
Je ne trouve pas un algorithme qui ferait que, comme la simple fonction récursive J'utilise pour trouver tous les éléments du même élément dans le tableau. Cela semble être beaucoup plus complexe.
Par exemple, l'algorithme doit également reconnaître qu'il n'ajoute pas le E en position 3: 4 au groupe mais le E en position 2: 3.
Je pense que l'étape intermédiaire décrit ci-dessus pour d'abord trouver alle éléments connectés d'un élément est inutiles, les mais pour le moment je fais ici et dans mon code pour rendre les choses plus clair :)
Cela fonctionne dans la plupart des cas, mais s'il y a des éléments égaux, il ne trouve pas toujours tous les éléments différents. Je pense que cela a quelque chose à voir avec l'ordre dans lequel ils regardent les voisins. Je pense que je devais vérifier chaque position avec chaque ordre possible de vérification des voisins. Une autre méthode consisterait à revenir à une position antérieure si la vérification échouait. Mais tout cela aboutirait à beaucoup, beaucoup d'appels récursifs. Pour ma situation particulière, j'ai trouvé une autre résolution. – user1043409