Ich versuche, einen Algorithmus zu schreiben, der den Pfad in n * n Matrix mit minimalen Kosten finden wird (jede Koordinate hat einen vordefinierten Kosten). Die Pfadkosten sind definiert als die Summe aller Koordinatenkosten. Die erste Eingabezeile enthält die Größe einer Matrix und die folgenden n Zeilen sind Tabellenzeilen. Die letzten zwei Codezeilen sind 1. Anfangskoordinaten 2. Endekoordinaten. Ausgabe ist die minimale Pfadkosten.Optimierung der minimalen Kosten Pfad funktioniert nicht
Beispiel Eingabe:
5
0 1 2 1 1
0 0 1 5 1
1 0 0 1 1
1 1 0 7 0
1 8 0 0 0
0 0
4 4
Ausgang 0
sein soll Dies ist Code mit memoization (es ohne memoization funktioniert, aber es ist langsam)
import copy
import sys
sys.setrecursionlimit(9000)
INF = 100000
n = int(input())
memo = {}
def input_matrix(n) :
p = []
for i in range(n) :
p.append(list(map(int, input().split())))
return p
def min_cost(matrix, x, y, end_x, end_y) :
if x == end_x and y == end_y :
return 0
if (x, y) in memo :
return memo[(x, y)]
if x == len(matrix) or y == len(matrix) or x == -1 or y == -1 or matrix[y][x] == -1:
return INF
z = copy.deepcopy(matrix)
z[y][x] = -1
memo[(x, y)] = min(
min_cost(z, x+1, y, end_x, end_y)+matrix[y][x],
min_cost(z, x-1, y, end_x, end_y)+matrix[y][x],
min_cost(z, x, y+1, end_x, end_y)+matrix[y][x],
min_cost(z, x, y-1, end_x, end_y)+matrix[y][x]
)
return memo[(x, y)]
matrix = input_matrix(n)
begin_coords = list(map(int, input().split()))
end_coords = list(map(int, input().split()))
print(min_cost(matrix, begin_coords[0], begin_coords[1], end_coords[0], end_coords[1]))
Sie möchten vielleicht beschreiben, was Sie ein wenig tun, und eine (kleine) Beispieleingabe mit der erwarteten Ausgabe bereitstellen. –
Auch wenn dies eine Optimierung ist, die nicht funktioniert, gibt es einen Code ohne dies, der bei kleinen Eingaben funktioniert? Ist das Memo die von Ihnen erwähnte Optimierung? –
Code funktioniert ordnungsgemäß ohne Memo. – gimli