Ruta de Costo Mínimo para visitar todos los Nodes situados en la Circunferencia de Circular Road

Dada la circunferencia del círculo y una array pos[] que marca la distancia de N puntos en el círculo en relación con un punto fijo en el sentido de las agujas del reloj. Tenemos que encontrar una distancia mínima a través de la cual podamos visitar todos los puntos. Podemos empezar con cualquier punto.
Ejemplos:
 

Entrada: circunferencia = 20, pos = [3, 6, 9] 
Salida: costo mínimo de ruta = 6 
Explicación: 
si comenzamos desde 3, vamos a 6 y luego a 9. Por lo tanto, el costo total de ruta es 3 unidades para primer movimiento y 3 unidades para el segundo movimiento que suma 6.
Entrada: circunferencia = 20 pos = [3, 6, 19] 
Salida: costo mínimo de ruta = 7 
Explicación: 
si comenzamos desde 19 y vamos a 3 costará 4 unidades porque vamos de 19 -> 20 -> 1 -> 2 -> 3 que da 4 unidades, y luego 3 a 6 que da 3 unidades. En total el costo mínimo será 4 + 3 = 7. 
 

Enfoque: 
para resolver el problema mencionado anteriormente, debemos seguir los pasos que se detallan a continuación: 
 

  • Ordena la array que marca la distancia de N puntos en el círculo.
  • Haga que el tamaño de la array se duplique agregando el elemento N con el valor arr[i + n] = circumference + arr[i] .
  • Encuentre el valor mínimo (arr[i + (n-1)] – arr[i]) para todas las iteraciones válidas del valor i.

A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation to find the
// Minimum Cost Path to visit all nodes
// situated at the Circumference of
// Circular Road
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum cost
int minCost(int arr[], int n, int circumference)
{
    // Sort the given array
    sort(arr, arr + n);
 
    // Initialise a new array of double size
    int arr2[2 * n];
 
    // Fill the array elements
    for (int i = 0; i < n; i++) {
        arr2[i] = arr[i];
        arr2[i + n] = arr[i] + circumference;
    }
 
    // Find the minimum path cost
    int res = INT_MAX;
 
    for (int i = 0; i < n; i++)
        res = min(res, arr2[i + (n - 1)] - arr2[i]);
 
    // Return the final result
    return res;
}
 
// Driver code
int main()
{
    int arr[] = { 19, 3, 6 };
 
    int n = sizeof(arr) / sizeof(arr[0]);
 
    int circumference = 20;
 
    cout << minCost(arr, n, circumference);
 
    return 0;
}

Java

// Java implementation to find the
// Minimum Cost Path to visit all nodes
// situated at the Circumference of
// Circular Road
import java.util.*;
import java. util. Arrays;
 
class GFG {
 
// Function to find the minimum cost
static int minCost(int arr[], int n,
                   int circumference)
{
    // Sort the given array
    Arrays.sort(arr);
 
    // Initialise a new array of double size
    int[] arr2 = new int[2 * n];
 
    // Fill the array elements
    for(int i = 0; i < n; i++)
    {
       arr2[i] = arr[i];
       arr2[i + n] = arr[i] + circumference;
    }
 
    // Find the minimum path cost
    int res = Integer.MAX_VALUE;
 
    for(int i = 0; i < n; i++)
       res = Math.min(res,
                      arr2[i + (n - 1)] -
                      arr2[i]);
 
    // Return the final result
    return res;
}
 
// Driver code
public static void main(String args[])
{
    int arr[] = { 19, 3, 6 };
    int n = arr.length;
    int circumference = 20;
 
    System.out.println(minCost(arr, n,
                               circumference));
}
 
}
 
// This code is contributed by ANKITKUMAR34

Python3

# Python3 implementation to find the
# minimum cost path to visit all nodes
# situated at the circumference of
# circular Road
 
# Function to find the minimum cost
def minCost(arr, n, circumference):
 
    # Sort the given array
    arr.sort()
 
    #Initialise a new array of double size
    arr2 = [0] * (2 * n)
 
    # Fill the array elements
    for i in range(n):
        arr2[i] = arr[i]
        arr2[i + n] = arr[i] + circumference
 
    # Find the minimum path cost
    res = 9999999999999999999;
 
    for i in range(n):
        res = min(res,
                  arr2[i + (n - 1)] -
                  arr2[i]);
 
    # Return the final result
    return res;
 
# Driver code
arr = [ 19, 3, 6 ];
n = len(arr)
circumference = 20;
 
print(minCost(arr, n, circumference))
 
# This code is contributed by ANKITKUMAR34

C#

// C# implementation to find the
// Minimum Cost Path to visit all nodes
// situated at the Circumference of
// Circular Road
using System;
 
class GFG{
 
// Function to find the minimum cost
static int minCost(int []arr, int n,
                   int circumference)
{
    // Sort the given array
    Array.Sort(arr);
 
    // Initialise a new array of double size
    int[] arr2 = new int[2 * n];
 
    // Fill the array elements
    for(int i = 0; i < n; i++)
    {
       arr2[i] = arr[i];
       arr2[i + n] = arr[i] + circumference;
    }
 
    // Find the minimum path cost
    int res = int.MaxValue;
 
    for(int i = 0; i < n; i++)
       res = Math.Min(res, arr2[i + (n - 1)] -
                           arr2[i]);
 
    // Return the readonly result
    return res;
}
 
// Driver code
public static void Main(String []args)
{
    int []arr = { 19, 3, 6 };
    int n = arr.Length;
    int circumference = 20;
 
    Console.WriteLine(minCost(arr, n, circumference));
}
}
 
// This code is contributed by Princi Singh

Javascript

<script>
 
// Javascript implementation to find the
// Minimum Cost Path to visit all nodes
// situated at the Circumference of
// Circular Road
 
// Function to find the minimum cost
function minCost(arr, n,circumference)
{
    // Sort the given array
    arr.sort((a,b)=>a-b)
 
    // Initialise a new array of double size
    var arr2 = Array(2* n).fill(0);
 
    // Fill the array elements
    for (var i = 0; i < n; i++) {
        arr2[i] = arr[i];
        arr2[i + n] = arr[i] + circumference;
    }
 
    // Find the minimum path cost
    var res = 1000000000;
 
    for (var i = 0; i < n; i++)
        res = Math.min(res, arr2[i + (n - 1)] - arr2[i]);
 
    // Return the final result
    return res;
}
 
// Driver code
var arr = [19, 3, 6 ];
var n = arr.length;
var circumference = 20;
document.write( minCost(arr, n, circumference));
 
</script>
Producción: 

7

 

Complejidad de tiempo: O(n * log n)

Espacio Auxiliar: O(n)

Publicación traducida automáticamente

Artículo escrito por ApurvaRaj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *