Hier wird ein parametrisiert working JavaScript-Beispiel mit Kommentaren, die Trick besteht darin, ein Array zu verwenden, um die Zellen/Knoten zu bezeichnen, die Sie bereits besucht haben.
var arr = [], visited, grp, val, rowLength = 6, threshold = 3;
// generate random array
for (var i = 0; i < 60; i++) {
arr.push(Math.floor(Math.random() * 6));
}
alert(JSON.stringify(findGroups())); // executing the function and displaying the result.
function findGroups() {
visited = []; // resetting visited
var ret = []; // the return value is an array of groups
for (var i = 0; i < arr.length; i++) {
if (!visited[i]) {
val = arr[i]; // set the value we are currently inspecting
grp = []; // reset the current group
flood(i); // the recursive flood function
if (grp.length >= threshold) // add the group to the result if it meets the criteria
ret.push(grp);
}
}
return ret;
}
function flood(idx) {
if (visited[idx] || arr[idx] != val) // only look at cells with matching value...
return; // ... that weren't visited yet
visited[idx] = true; // mark as visited
grp.push(idx); // add index to current group
if (idx % rowLength != 0) // can go left
flood(idx - 1);
if (idx % rowLength != rowLength - 1) // can go right
flood(idx + 1);
if (idx >= rowLength) // can go up
flood(idx - rowLength);
if (idx < arr.length - rowLength) // can go down
flood(idx + rowLength);
}
Verwenden Sie einen Flood-Fill-Algorithmus. – nemetroid
Was ich in meinem Kopf theoretisiert habe, ist irgendwie einen Startpunkt irgendwo entlang des Arrays zu bestimmen, dann beginnen Schleifen in jeder "Richtung", aber dies könnte schnell zu Dutzenden von Schleifen mit größeren Gittern eskalieren, da jeder verbundene Typ seine eigenen Schleifen benötigt. _ (Es wurde noch kein Code von mir in dieser Abteilung geschrieben, da ich nichts anfangen kann.) _ – F8bit
LSL ist überhaupt nicht ähnlich zu C, das keine Skriptsprache ist, LSL ist dem Javascript ähnlicher - so wie es ist String-Handhabung. –