как-то так
описание не очень
class Peak:
"""..."""
def __init__(self, L):
self.L = L[:]
self.n = len(self.L)
self.m = len(self.L[0])
self.OL = []
def get_dim(self):
return (self.n, self.m)
def get_val(self, loc):
return self.L[loc[0]][loc[1]]
def next_element(self, loc):
if loc[1] < self.m - 1:
return loc[0], loc[1] + 1
else:
if loc[0] < self.n - 1:
return loc[0] + 1, 0
else:
return -1
def get_val(self, x, y, p=(1, 0)):
for i, j in [(x + p[0], y + p[1])] + [(x+1, y), (x, y+1), (x, y-1), (x-1, y)]:
if i < 0 or j < 0 or i >= self.m or j >= self.n or (i, j) in self.OL:
continue
if self.L[j][i] >= self.L[y][x]:
self.OL.append((i, j))
return (i, j, (i-x, j-y))
return (x, y, [])
def greedy_ascent(self, start=(0,0)):
x, y, p = self.get_val(*start)
while p:
x, y, p = self.get_val(x, y, p)
return x, y