strom = [] nejvyssiDostupnyStrom = [] def nactiVstup(): pocetRadku = int(input("Pocet radku:")) for i in range(0, pocetRadku): radek = input() strom.append([]) nejvyssiDostupnyStrom.append([]) for j in range(0, len(radek)): strom[i].append(int(radek[j])) nejvyssiDostupnyStrom[i].append(-1) def spoctiNejvyssiDostupny(i, j): if (nejvyssiDostupnyStrom[i][j] != -1): return nejvyssiDostupnyStrom[i][j] maxV = strom[i][j] if (i - 1 >= 0 and strom[i][j] < strom[i-1][j]): maxV = max(spoctiNejvyssiDostupny(i-1,j), maxV) if (i + 1 < len(strom) and strom[i][j] < strom[i+1][j]): maxV = max(spoctiNejvyssiDostupny(i+1,j), maxV) if (j + 1 < len(strom[i]) and strom[i][j] < strom[i][j+1]): maxV = max(spoctiNejvyssiDostupny(i,j+1), maxV) if (j - 1 >= 0 and strom[i][j] < strom[i][j-1]): maxV = max(spoctiNejvyssiDostupny(i,j-1), maxV) nejvyssiDostupnyStrom[i][j] = maxV return maxV def cesta(i, j, value): if (value == strom[i][j]): print(i,j) else: print(i,j, "-> ", end='') if(i+1 < len(nejvyssiDostupnyStrom) and nejvyssiDostupnyStrom[i+1][j] == value and strom[i][j] < strom[i+1][j]): cesta(i+1,j, value) elif(j+1 < len(nejvyssiDostupnyStrom[i]) and nejvyssiDostupnyStrom[i][j+1] == value and strom[i][j] < strom[i][j+1]): cesta(i,j+1, value) elif(j-1 >= 0 and nejvyssiDostupnyStrom[i][j-1] == value and strom[i][j] < strom[i][j-1]): cesta(i,j-1, value) elif(i-1 >= 0 and nejvyssiDostupnyStrom[i-1][j] == value and strom[i][j] < strom[i-1][j]): cesta(i-1,j, value) def maxRozdil(): maxV = 0 pozI = 0 pozJ = 0 for i in range(0, len(strom)): for j in range(0, len(strom[i])): if (maxV < spoctiNejvyssiDostupny(i,j)): pozI = i pozJ = j maxV = spoctiNejvyssiDostupny(i,j) cesta(pozI, pozJ, maxV) nactiVstup() maxRozdil()