Advertisement
lblanes

Recursivo para buscar menor distância

Sep 14th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.   function shortestDistance(index, nivel = 0, aux = []) {
  2.     const alvo = 'd';
  3.  
  4.     console.log(' '.repeat(nivel + 1), 'Aux', aux);
  5.     if (aux.find(x => x == index))
  6.     {
  7.         console.log(' '.repeat(nivel + 1), 'Loop detectado');
  8.         return -1;
  9.     }
  10.  
  11.     let newAux = [...aux, index];
  12.  
  13.     let city = this.setCity[index];
  14.     console.log(' '.repeat(nivel), 'Buscando filhos da cidade', city.city);
  15.  
  16.     if (city.city === alvo)
  17.     {
  18.         console.log(' '.repeat(nivel + 1), 'Encontrou', alvo);
  19.       return 0;
  20.     }
  21.      
  22.     let distances = [];
  23.     city.nextCityIndex.forEach((cityIndex, childIndex) => {
  24.         let distanceToChild = city.distanceToChild[childIndex];
  25.         console.log(' '.repeat(nivel + 1), 'Distancia do filho', city.city ,'até o filho', this.setCity[cityIndex].city, 'é', distanceToChild);
  26.  
  27.         let minorDistanceOfChildToC = this.shortestDistance(cityIndex, nivel + 1, newAux);
  28.         console.log(' '.repeat(nivel + 1), 'Menor distância do filho', this.setCity[cityIndex].city, 'até', alvo, 'é', minorDistanceOfChildToC);
  29.  
  30.         if (minorDistanceOfChildToC != -1)
  31.             distances.push(distanceToChild + minorDistanceOfChildToC);
  32.     })
  33.  
  34.     console.log(' '.repeat(nivel + 1), "Distâncias encontradas do filho", city.city, 'até', alvo, distances);
  35.  
  36.     var min = -1;
  37.     if (distances.length > 0)
  38.     {
  39.         min = distances.reduce((a, b) => {
  40.             return Math.min(a, b);
  41.         })
  42.  
  43.         console.log(' '.repeat(nivel + 1), "Menor distância do filho", city.city, 'até', alvo, 'é', min);
  44.       }
  45.       else
  46.       {
  47.         console.log(' '.repeat(nivel + 1), "Não foi possível encontrar menor distância do filho", city.city, 'até', alvo);
  48.       }
  49.  
  50.     return min;
  51.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement