Bonjour a tous,
voila j'aimerais savoir si vous aviez un algorithme pour avoir le nombre de voisins de tous les points d'une matrice contenant des booléens.
Voila, merci par avance.
Bob
Bonjour a tous,
voila j'aimerais savoir si vous aviez un algorithme pour avoir le nombre de voisins de tous les points d'une matrice contenant des booléens.
Voila, merci par avance.
Bob
Est-ce que tu arrives à être un peu plus explicite?
En gros, tu as une matrice qui contient des booléens, et pour chacun de ses points tu veux connaître quoi exactement? Le nombre de voisins qu ivalent true? (Parce que le nombre de voisins tout court, c'est 4, a part 2 dans les coins et 3 dans les bords)...
et comment veux-tu exprimer ton résultat? par une deuxième matrice qui contient des nombres entiers? Un peu comme le jeu le "démineur" ou chaque point indique combien il y a de mines dans les cases adjacentes?
et est-ce que deux points sont considéré comme voisins si ils se touchent seulement par un angle? (en gros, est ce que M(i,j) est voisin de M(i+1, j+1))?
Mouais...
En plus je vois pas bien quel autre algo que "tester les 4 voisins" (ou 8 si on considère les diagonales) tu comptes utiliser...
Sinon si tu entends par voisins l'ensemble des booléens (disons à true) qui se touchent,alors là c'est plus dur... On peut utiliser des algos type croissance région, et même Fast marching par exemple qui est très rapide pour ce genre de cas (en gros c'est comme si autour du point considéré on propageait un liquide qui s'arrête à false et continue à true, puis qu'on comptait la surface du fluide)...
soit Ai,j l'element d'interêt,
on peut considere
n=0;
for i1:=max(i-1,matrice_LI_MIN),Min(i+1,MATRICE_LI_Max) do
for j1:=max(j-1,matrice_COL_MIN),Min(j+1,MATRICE_COL_Max) do
if ( i <> i1 ) or ( j <> j1 then
begin
inc(n); // l'element i1,j1 est un proche voisin ( touche coté ou angle)
// qu'en faire ???
// faute de formuler votre question de façon + précise ce n'est pas sur le site
// alorithme que vous trouverez une réponse à votre soucis
end;
// n contient à la sortie 8 ( centre) ,5 (bord) ou 3 ( angle) si la matrice est
// suffisement grande
désoler si je me suis mal exprimé.
en fait j'ai deux matrice de taille identique, une contenant des booléens et une deuxieme d'entier.
en fait je voulai recupéré dans la matrice contenant les entier, le nombre de voisin à true de la matrice correspondante.
je ne sais pas si j'ai été tres explicite.
par exemple la matrice de booleens est:
T F T T T
F F F F F
T F T F T
la matrice d'entier est alors
0 2 1 2 1
0 0 0 0 0
0 2 0 2 0
car pour chaque case je recupere le nombre de voisin a true.
voila.
PS: une case à au maximum 8 voisins (je compte les diagonales)
L'algorithme le plus rapide est de parcourir la matrice de booléen et d'incrémenter tous les voisins dans la matrice d'entier lorsque l'on tombe sur une case à true.
--
Jedaï
Partager