2017-02-28 1 views
-5

Ich habe 2d Array wie folgt:Wie kann man verbundene Komponenten in einem 2D-Array markieren?

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

Und ich möchte die angeschlossenen Komponenten (4 Richtungen) so sein beschriften:

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

Bitte helfen Sie mir dieses Problem zu lösen . Danke !!! (Java oder Javascript Code Beispiel wäre toll)

+1

, was Sie bisher getan haben dieses Problem zu beheben? –

+0

Ich mache 2 für Schleifen für Zeile und Spalte, dann für jedes Element, ich überprüfe nach Richtungen, um zu sehen, ob ihre Nachbarn die gleiche Nummer sind, und gruppieren sie dann. aber ich habe immer einen Konflikt auf diese Weise. –

+0

@ThienN Bitte ändern Sie eine beantwortete Frage nicht vollständig. Wenn Sie können, fragen Sie einen neuen. – ChrisF

Antwort

1

Zuerst ändern Sie den Wert von 1 zu -1, weil Sie 1 als Flag verwenden müssen.

Dann könnten Sie die Elemente iterieren und eine Überprüfung durchführen und wenn es das Flag -1 hat, dann ändern Sie es auf den tatsächlichen Wert. Fahren Sie mit dem Element von rechts und unten fort.

Wenn ein Element gefunden wurde, erhöhen Sie den Wert.

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

Ich aktualisiere die Frage ein wenig, könnten Sie mir bitte dabei helfen? –

+0

@ThienN, eigentlich hast du eine ganz neue Frage gestellt .. bitte stelle es auf die ursprüngliche Frage zurück - und frage eine neue. –

+0

Ich habe nicht genug Punkte, um eine neue Frage zu stellen. Ich muss noch 3 Tage warten. Weißt du, wie ich mehr Punkte bekommen kann, damit ich mehr Fragen stellen kann? –

Verwandte Themen