Контейнеры Python содержат ссылки на другие объекты. См. Этот пример:
>>> a = []
>>> b = [a]
>>> b
[[]]
>>> a.append(1)
>>> b
[[1]]
В этом b
есть список, содержащий один элемент, который является ссылкой на список a
. Список a
изменен.
Умножение списка на целое эквивалентно добавлению списка к себе несколько раз (см. операции общей последовательности ). Итак, продолжаем с примера:
>>> c = b + b
>>> c
[[1], [1]]
>>>
>>> a[0] = 2
>>> c
[[2], [2]]
Мы видим, что список c
теперь содержит две ссылки на список a
, который эквивалентен c = b * 2
.
Python FAQ также содержит объяснение этого поведения: Как создать многомерный список?
Эту проблему можно рассматривать как ориентированный граф, где ребро от вершины A
до другой вершины B
представляет грузовик, идущий из A
в B
(или производителя, желающего перевезти груз от A
до B
), а вес кромки можно использовать для представления величины нагрузки (или грузоподъемности грузовика).
Вы можете использовать матрицу смежности для каждого производителя и перевозчика. Каждый раз, когда новая запись заполняется в любой из матриц (скажем, в матрице производителя), соответствующая запись проверяется, проверяется в другой матрице (матрице транспортера) и сравнивается нагрузка, чтобы увидеть, есть ли совпадение. 1110]
```python
class trans_struct(T_ID, T_Type, T_Length, Trucks, Price):
def __init__(self, T_ID, T_Type, T_Length, Trucks, Price)
self.T_ID = T_ID
self.T_Length = T_Length
self.T_Trucks = T_Trucks
self.T_Type = T_Type
self.T_Price = T_Price
class man_struct(M_ID, M_Type, T_Length, Trucks, Loading_Time):
def __init__(self, M_ID, M_Type, T_Length, Trucks, Loading_Time)
self.M_ID = M_ID
self.T_Length = T_Length
self.T_Trucks = T_Trucks
self.T_Type = T_Type
self.T_Price = T_Price
dicti = {A:0, B:1, C:2} #dictionary to map places to integeral indexes
num_places = len(dicti)
trans_mat = [[[] for __ in range(num_places)] for _ in range(num_places)] #initialize transport matrix to a default value
manf_mat = [[[] for __ in range(num_places)] for _ in range(num_places)]
def manf_input():
#take input for manufacturer's data in this func into the structure object
manf_mat[dicti[A]][dicti[B]].append((struct.T_Weight, struct)) #assuming manufacturer wanted to move goods from A to B
check_for_match(A, B) #function to compare corresponding matrix entries each time a new entry is inserted
def check_for_match(A, B, T_Length):
for entry in trans_mat[dicti[A]][dicti[B]]:
if entry[0]>= T_Length:
#match found display required info by retreiving from the structure
#
```
Я написал только некоторые функции здесь. Я написал только функцию, которая проверяет, когда для производителя создается новая запись, а не наоборот. Вы можете добавить дополнительные ограничения, такие как дата, время и т. Д.