2017-09-11 4 views
0

Prendre une entrée où yPerms est une matrice 3D d'exemple:Arbre de traversée à travers matrice 3d

[ 
    [[1,2,3],[4,5,6]], 
    [[11,12,13],[14,15,16]] 
] 

La sortie doit être toute combinaison possible de valeurs dans chaque rangée. Pour cet exemple, la sortie correcte serait

[ 
    [[1,2,3],[11,12,13]], 
    [[1,2,3],[14,15,16]], 
    [[4,5,6],[11,12,13]], 
    [[4,5,6],[14,15,16]] 
] 

L'entrée en réalité aura beaucoup plus de lignes et de colonnes de sorte qu'il ne peut pas être fait avec seulement quelques boucles pour (au moins je ne vois pas comment) .

Ma tentative est un gâchis complet, la question est ce chemin au sein de la boucle qui est censé « reset » temp, il semble avoir pris la valeur à partir de la prochaine fonction récursive appelée:

function treeTraverse(yPerms, unique, row) { 
     var result = []; 
     var path = unique||[]; 
     var n = row||0; 
     if (yPerms.length <= n) { 
      console.log("found a path"); 
      return path; 
     } 
     for(let m in yPerms[n]) { 
      var temp = path; 
      temp.push(yPerms[n][m]); 
      result.push(treeTraverse(yPerms,temp,n+1)); 
     } 
     return result; 
    } 

Répondre

0

Le problème était que l'unique et la température devenaient la même variable en effet, juste un pointeur l'un pour l'autre, ce qui n'était pas ce que je voulais, je voulais qu'ils soient séparés mais prennent la même valeur pour pouvoir manipuler la température sans changer de chemin . Pour résoudre ce sur le chemin si

var temp = path.slice(); 

Je tranche simplement utilisé() qui crée un double identique de chemin et assigné à température.