Ce e în neregulă cu algoritmul de detectare?

umane la urma urmei

Dacă calculați distanța "Manhattan" între pozițiile curente și cele ideale ale plăcilor, atunci de ce, sub semnele modulului, în fiecare caz se folosește numai indexul i. Cred că va fi corectată mai corect:






distanța + = abs ((i-m [i] [j] / 4)) + abs ((j-m [i]

UPD.
algoritmul pune un cip gol întotdeauna în poziție [0, 0] și dacă îl puneți într-un alt loc, acesta "se blochează" Cred că este din cauza calculului distanței. Ignorați valoarea zero (adică poziția cadetului gol) din anumite motive.
Dacă corectați textul în acest fel, atunci exemplul pe care l-ați specificat ([[1, 2, 3, 4], [5, 6, 7, 8], 9, 0, ])








def puzz_astar (start, end):
"" ""
Algoritmul A *
"" ""
front = [[heuristic_2 (start), start]]
print (din față)
extins = []

în timp ce față:
i = 0
pentru j în intervalul (1, len (față)):
dacă frontul [i] [0]> față [j] [0]:
i = j
calea = față [i]
față = față [: i] + față [i + 1:]
endnode = cale [-1]
dacă endnode == sfârșit:
pauză
dacă endnode în extins: continuați
pentru k în mișcări (endnode):
dacă k în extinsă: continuați
= path [0] + abs (heuristic_2 (k) - heuristic_2 (endnode))] + cale [1:] +
front.append (noua cale)
expanded.append (endnode)
expanded_nodes + = 1

imprimați "Noduri expandate:", expanded_nodes
print "Soluție:"
pp.pprint (calea)

def heuristic_2 (puzz):
"" ""
Distanța de la Manhattan
"" ""
distanța = 0
m = eval (puzz)
pentru i în intervalul (4):
pentru j în intervalul (4):
dacă m [i] [j] == 0: distanța + = 3-i + 3-j
distanța + = abs ((i-m [i] [j] / 4)) + abs ((j-m [i]
distanța de retur







Trimiteți-le prietenilor: