• + 0 comments

    A questão apresentada descreve um problema de roteamento em um grafo ponderado, onde Jeanie, uma carteira, precisa entregar cartas em diferentes cidades de Byteland. O objetivo é encontrar a distância mínima que Jeanie precisa percorrer para entregar todas as cartas.

    POREM SOMENTE COMPILA ERRO :

    import math import os import sys import itertools

    def min_delivery_distance(n, letters, roads): # Construir o grafo (lista de adjacências) graph = [[] for _ in range(n)] for u, v, w in roads: graph[u - 1].append((v - 1, w)) graph[v - 1].append((u - 1, w))

    # Função DFS para calcular distâncias
    def dfs(start, end, visited, current_dist):
        if start == end:
            return current_dist
        visited[start] = True
        min_dist = float('inf')
        for neighbor, weight in graph[start]:
            if not visited[neighbor]:
                new_dist = dfs(neighbor, end, visited[:], current_dist + weight)
                min_dist = min(min_dist, new_dist)
        return min_dist
    
    # Calcular distâncias entre todas as cidades de entrega
    dist = {}
    for i in range(len(letters)):
        for j in range(i + 1, len(letters)):
            start = letters[i] - 1
            end = letters[j] - 1
            visited = [False] * n
            distance = dfs(start, end, visited, 0)
            dist[(letters[i], letters[j])] = distance
            dist[(letters[j], letters[i])] = distance
    
    # Gerar todas as permutações e calcular a distância mínima
    min_distance = float('inf')
    for permutation in itertools.permutations(letters):
        current_distance = 0
        for i in range(len(permutation) - 1):
            current_distance += dist[(permutation[i], permutation[i + 1])]
        min_distance = min(min_distance, current_distance)
    
    return min_distance
    

    if name == 'main': fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n, k = map(int, input().rstrip().split())
    letters = list(map(int, input().rstrip().split()))
    roads = []
    for _ in range(n - 1):
        roads.append(list(map(int, input().rstrip().split())))
    
    result = min_delivery_distance(n, letters, roads)
    
    fptr.write(str(result) + '\n')
    fptr.close()