А я где-то написал, что тут сложно ? Я же сказал, что задача решается обходом графу.
Что-то вы перемудрили с реализацией. Это обычный обход по графу. Вот вам нерекурсивный алгоритм - хоть на 0 записей, хоть на 10 миллиардов.
func Find_max_number_of_connected_colors_in_grid(grid [][]int) int {
var result int
rl := len(grid)
if rl == 0 { return 0 }
cl := len(grid[0])
if cl == 0 { return 0 }
s := Stack{}
visited := make(map[[2]int] bool)
dr := []int {-1, 1, 0, 0,}
dc := []int { 0, 0, 1,-1,}
for r:=0; r < rl; r++ {
for c := 0; c < cl; c++ {
if visited[[2]int{r, c}] { continue }
ncc := 0
v := grid[r][c]
s.Push(r, c)
visited[[2]int{r, c}] = true
for !s.IsEmpty() {
for i := 0; i < 4; i++ {
rn := r + dr[i]
cn := c + dc[i]
if rn < 0 || cn < 0 { continue }
if rn >= rl || cn >= cl { continue }
if grid[rn][cn] != v { continue }
if visited[[2]int{rn, cn}] { continue }
s.Push(rn, cn)
visited[[2]int{rn, cn}] = true
}
r, c = s.Pop()
ncc++
}
if result < ncc {
result = ncc
}
}
}
return result
}
А вообще все эти задачки ни к чему не ведут ? За 20 минут вы даже не напечатаете код и даже сам гугл признает, что это не идеальная система. Ну можно задавать кучу вопросов, а сколько у нас цветов, а не выйдем ли мы за границы стека - а есть у нас все бля запускается на кристале, что нам нужно экономить пямять или процессорное время? А если такого цвета нет? А как нам рассматривать цвета красный или светло красный ? А что если алгоритм пишет дальтоник ?
Ну а так да - получил удовольствие от решения. Вот gist если кому-то нужно: https://gist.github.com/P-A-R-U-S/ac59ec4a6d1dbf1a664487297f3dca4b