Staram się stworzyć solver zadań z 8 zagadek, stosując różne algorytmy,takie jak BFS, DFS, A*, itp., za Pomocą pythona. Dla tych, którzy nie są zaznajomieni z problemem, 8 zadań-zagadek-gra składająca się z 3 wierszy i 3 kolumn. Można przenieść pustą płytkę tylko w poziomie lub w pionie, 0 jest pusty, płytki. To wygląda tak (nie mogłem dodać zdjęcia z powodu reputacji moich kont).:
https://miro.medium.com/max/679/1*yekmcvT48y6mB8dIcK967Q.png
initial_state = [0,1,3,4,2,5,7,8,6]
goal_state = [1,2,3,4,5,6,7,8,0]
def find_zero(state):
global loc_of_zero
loc_of_zero = (state.index(0))
def swap_positions(list, pos1, pos2):
first = list.pop(pos1)
second = list.pop(pos2-1)
list.insert(pos1,second)
list.insert(pos2,first)
return list
def find_new_nodes(state):
if loc_of_zero == 0:
right = swap_positions(initial_state,0,1)
left = swap_positions(initial_state,0,3)
return(right,left)
find_zero(initial_state)
print(find_new_nodes(initial_state))
Problem mam taki, chcę, aby funkcja "find_new_nodes(stan)" do zwracania 2 różne listy, żebym mógł wybrać najbardziej obiecujący zespół, w zależności od algorytmu) i tak dalej. Ale wniosek mojego kodu składa się z dwóch takich samych list.
To mój wynik: ([4, 0, 3, 1, 2, 5, 7, 8, 6], [4, 0, 3, 1, 2, 5, 7, 8, 6])
Co mogę zrobić, aby oddał 2 różne listy? Mój cel-odzyskać wszystkie możliwe ruchy w zależności od tego, gdzie znajduje się 0, korzystając z funkcji find_new_nodes. Przepraszam, jeśli to proste pytanie, ale po raz pierwszy robię projekt tak trudne.