Я новичок в питоне и программировании в целом. Я написал функцию, которая будет искать соседние элементы в массиве и искать значения со значениями в пределах 0,05 друг от друга, как это делает алгоритм наводнения. Единственное различие заключается в том, что я делаю что-то глупое, когда дело доходит до подсчета, сколько времени функция запускается (о чем я думаю, также расскажу, сколько элементов я нашел), поэтому мои значения счетчика ошибочны. Код работает, когда дело доходит до нахождения соседних элементов в пределах 0,05 друг от друга, просто подсчет смешно.Счетчик в рекурсивной функции
def floodcount (x,y,array,value,count=0): #akin to a bucket fill in paint, finds the area instead
nrows = len(array)-1 #rows of the image
ncols = len(array[0])-1 #columns of the image
diff = array[x][y] - value
if (diff < 0.00) or (diff > 0.05): # the base case, finding a diff more than 0.05 or less than 0 is like finding a boundary
return 0
count = count +1
print 'count1 ',count
array[x][y] = -5 # so we do no calculate this pixel again
#print "[",x,",",y,"]"
if x > 0:
#print '1'# if not the first elemnet then can go back, this makes sure that x is within the array all the time
floodcount (x-1,y,array,value,count)
if y > 0:
#print '2'
floodcount (x,y-1,array,value,count)
if x < nrows:
#print '3'
floodcount (x+1,y,array,value,count)
if y < ncols:
#print '4'
floodcount (x,y+1,array,value,count)
if x > 0 and y > 0:
#print '5'
floodcount (x-1,y-1,array,value,count)
if x < nrows and y < ncols:
#print '6'
floodcount (x+1,y+1,array,value,count)
if x <nrows and y > 0:
#print '7'
floodcount (x+1,y-1,array,value,count)
if x > 0 and y < ncols:
#print '8'
floodcount (x-1,y+1,array,value,count)
print 'count2 ',count
return count
Таким образом, для тестового примера
массив = [[5,1,1,3,4], [4,5,6,2,5], [5,8,5, 5,9]] х = 0 и у = 0
ВЫХОД
count1 1 count1 2 count1 3 count1 4 count1 5 count2 5 count2 4 count2 3 count1 3 count2 3 count2 2 count2 1
Как вы можете увидеть что-то подозрительное: P Можно ли указать, что я делаю неправильно? Любая помощь будет оценена по достоинству.
Я думаю, что nrows и ncols следует переименовать, потому что они фактически не хранят количество строк и столбцов (я смутился этим при попытке ответить). Удалите -1 из их инициализации и измените логику оператора if. – colithium