Hi,
I got the above error when I checked my code. Basically my program runs as follows:
1. obtain a matrix of distances between cities
2. given a permutation of cities of length equal to the number of power plants, see if every city is covered.
It seems the first step is taking a huge amount of time, when the cities are many. But I don't think it's possible to improve this, as the distance records seem indispensable to me.
Here are my codes for reference (sorry that there are some long lines):
from itertools import permutations
def power_plants(network:set, ranges:list):
def dist(a:str, b:str, network = network):
if a == b: return 0
autre = lambda x: x[not x.index(a)]
return 1 + min([dist(autre(c),b,
network=[d for d in network if a not in d]) for c in network if a in c],default = 50)
cities = list(set(s for s in format(network) if s.isalpha()))
m = len(cities)
graph = [[dist(s,t) for t in cities] for s in cities]
form = lambda S: {cities[S[i]]:ranges[i] for i in range(len(ranges))}
for S in permutations(range(m), len(ranges)):
if all(any(graph[c][S[i]]<= ranges[i] for i in range(len(ranges))) for c in range(m)): return form(S)
return None
Created at: 2020/04/26 17:46; Updated at: 2020/04/28 18:44
The question is resolved.