2017-02-28 5 views
-5

J'ai tableau 2D comme ceci:Comment étiqueter des composants connectés dans un réseau 2D?

0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 1 1 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 0 0 1 1 1 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1 0 1 0 1 0 1 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0

Et je veux étiqueter les composants connectés (4 directions) être comme ceci:

0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 2 2 2 0 3 3 0 1 0 0 0 0 0 1 0 0 2 0 2 0 3 3 0 1 0 4 4 4 0 1 0 0 2 0 2 0 0 0 0 1 0 4 0 4 0 1 0 0 2 0 2 0 0 0 0 1 0 4 0 4 0 1 0 0 2 2 2 0 0 0 0 1 0 4 0 4 0 1 0 0 0 0 0 5 5 5 0 1 0 4 4 4 0 1 0 0 0 0 0 5 0 5 0 1 0 0 0 0 0 1 0 0 0 0 0 5 5 5 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 0 0 0 0 7 7 7 7 0 0 0 6 0 0 0 6 0 0 0 0 7 0 0 7 0 0 0 6 0 6 6 6 6 6 0 0 7 7 7 7 0 0 0 6 0 6 0 6 0 6 0 0 7 7 7 7 0 0 0 6 6 6 6 6 6 6 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 6 0 0 0 0 0 0 0 0

S'il vous plaît me aider à résoudre ce problème . Merci !!! (exemple de code java ou javascript serait super)

+1

ce que vous avez fait jusqu'à présent pour résoudre ce problème? –

+0

Je fais 2 pour les boucles pour la ligne et le col, puis pour chaque élément, je vérifie les directions pour voir si leurs voisins sont le même nombre, puis les grouper. mais j'ai toujours un conflit de cette façon. –

+0

@ThienN s'il vous plaît ne pas complètement changer une question répondue. Quand vous le pouvez, demandez-en un nouveau. – ChrisF

Répondre

1

Tout d'abord, changez la valeur de 1 en -1, car vous devez utiliser 1 comme indicateur.

Ensuite, vous pouvez itérer les éléments et effectuer une vérification et si elle a l'indicateur -1, alors changez-le à la valeur réelle. Procéder avec l'élément de la droite et du bas.

Si un élément a été trouvé, incrémenter la valeur.

function test(array, i, j, value) { 
 
    if (array[i] && array[i][j] === -1) { 
 
     array[i][j] = value; 
 
     test(array, i + 1, j, value); 
 
     test(array, i, j + 1, value); 
 
     return true; 
 
    } 
 
} 
 

 
var data = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1], [0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1], [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1], [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1], [0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1], [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1], [0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]], 
 
    value = 1; 
 

 
data.forEach(function (a) { 
 
    a.forEach(function (b, i, bb) { 
 
     bb[i] = -b; 
 
    }); 
 
}); 
 

 
data.forEach(function (a, i, aa) { 
 
    a.forEach(function (b, j, bb) { 
 
     test(aa, i, j, value) && value++; 
 
    }); 
 
}); 
 

 
document.getElementById('out').innerHTML = data.map(function (a) { return a.join(' '); }).join('\n');
<pre id="out"></pre>

+0

Je viens de mettre à jour la question un peu, pourriez-vous s'il vous plaît m'aider avec cela? –

+0

@ThienN, en fait vous avez fait une toute nouvelle question .. s'il vous plaît revenir à la question originale de retour - et demander un nouveau. –

+0

Je n'ai pas assez de points pour poser une nouvelle question. Je dois attendre 3 jours de plus pour le faire. Savez-vous comment je peux obtenir plus de points afin que je puisse poser plus de questions? –