Я реализую BFS в python. Чтобы добавить узлы моего графа в мою очередь, я использую следующие строки кода:
graph = {}
graph['you'] = 'Alice','Bob','Claire'
search_queue+=graph['you']
Это отлично сохраняет мои ключевые значения как отдельные элементы в очереди. Однако, если мой ключ имеет одно значение, например, graph['Alice'] = 'Peggy'
search_queue+=graph['Alice']
, на выходе будет очередь с 'p', 'e', 'g', 'g', 'y', сохраненными как отдельные значения. Я знаю, что append () следует использовать для добавления элемента в очередь или список, но мне нужно добавить как несколько, так и отдельные значения для разных ключей. Есть ли способ сделать это иначе? До сих пор я использовал ',' в конце значения, например graph['Alice'] = 'Peggy',
, для обработки значения ключа, которое может быть объединено с очередью или списком без потери строки. Но я уверен, что должен быть способ лучше. Вот мой код -
from collections import deque
def congratulations_msg():
'''message to display success'''
print('Congratulations, we have found the element')
graph = {}
graph['you'] = 'Alice','Bob','Claire',
graph['Bob'] = 'Anuj','Peggy',
graph['Claire'] = 'Johnny','Thom',
graph['Alice'] = 'Peggy',
graph['Peggy']='you',
# Assign element to be searched
seller='Thom'
#Create a dequeue to store nodes
search_queue = deque()
# Initialize queue with values of 'you' key
search_queue+=graph['you']
checked_elements=[]
# Loop while queue is not empty
while search_queue:
print(search_queue)
#Check if element in queue already processed
if search_queue[0] in checked_elements:
search_queue.popleft()
continue
#Check if queue element is the one that we are looking for
elif seller == search_queue[0]:
congratulations_msg()
break
else:
#Store store processed queue element and add its nodes to the queue
checked_elements+= search_queue[0],
popped_element = search_queue.popleft()
checked_elements+= popped_element
search_queue+=graph.get(popped_element,'')