我正在尝试解决飞机时刻表问题,我收到一份飞机清单,我必须以这样一种方式停放飞机,即停放时不会干扰其他飞机的起飞。到目前为止,我在 Python 中有这个解决方案替代方案,但是我在回溯的实现方面遇到了问题,因为该程序应该给我打印一个字典,其中包含飞机应该停放的位置,但它打印的是一个空字典。示例输入 6 4 5 01 .. == .. 02 03 04 .. 05 06 07 08 .. ## 09 10 11 .. .. 12 +1 +2 +3 +4 +5 +6 -6 -5 - 4 -3 -2 -1 示例输出案例 1:是 12 09 05 06 02 10
def movimientoValido(matriz, filas, columnas, parqueaderosAsignados):
if matriz[filas][columnas] == "##":
return False
if not matriz[filas][columnas].isdigit():
return False
if matriz[filas][columnas] in parqueaderosAsignados.values():
return False
return True
def backtrack(matriz, listaEventos, indiceAvion, parqueaderosAsignados):
if indiceAvion == len(listaEventos):
return True
actual = listaEventos[indiceAvion]
if actual > 0: # Aterrizando
for filas in range(len(matriz)):
for columnas in range(len(matriz[0])):
if movimientoValido(matriz, filas, columnas, parqueaderosAsignados, indiceAvion):
parqueaderosAsignados[indiceAvion] = matriz[filas][columnas]
if backtrack(matriz, listaEventos, indiceAvion + 1, parqueaderosAsignados):
return True
parqueaderosAsignados[indiceAvion] = ""
return False
def recibirMatriz():
parqueaderosAsignados = {}
numeroAviones, filas, columnas = map(int, input().split())
if numeroAviones == 0:
return False
matriz = []
for _ in range(filas):
matriz.append(input().split())
listaEventos = list(map(int, input().split()))
for i in range(numeroAviones):
parqueaderosAsignados[i] = ""
backtrack(matriz, listaEventos, 0, parqueaderosAsignados)
# Imprimir el resultado de la asignación de parqueaderos
print(parqueaderosAsignados.values())
def main():
while True:
if not recibirMatriz():
break
if __name__ == '__main__':
main()
示例输出案例 1:是 12 09 05 06 02 10 但这是我的实际输出:dict_values(['', '', '', '', '', ''])