Это слишком долго для комментария. Я опубликую свое решение позже, если вы не можете решить его, но вот как я это сделал (менее чем в 15 строках кода): я сначала создал второй массив (немного больше, больше [n + 2] [ n + 2]) и сделали n / 2 пас:
0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0
0 1 0 1 1 1 0 0
0 1 0 1 2 2 1 0
0 0 1 2 2 2 1 0
0 0 0 1 2 2 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0
0 1 0 1 1 1 0 0
0 1 0 1 2 2 1 0
0 0 1 2 3 2 1 0
0 0 0 1 2 2 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0
Где ненулевое число x означает «Я - центр ромба размера x» (я выражаю размер в зависимости от длины диагоналей [которые в вашем случае равны) ромб). Вы можете определить, есть ли у вас центр ромба размера (k + 1), проверив, все ли {сверху, справа, вниз, влево} центры ромба размера k.
Преимущество первого создания массива большего размера состоит в том, что он действительно упрощает вашу логику, но я мог бы сделать это на месте, с более запутанной логикой, изменив исходный массив или используя второй массив того же размера, что и входные данные (еще раз, гораздо проще просто поставить безопасный «забор» из всех нулей вокруг вашего ввода).
Если вы не «окружаете» свой массив забором, у вас есть много дополнительных проверок if / else: это может привести к ошибкам, привести к большему коду и к более уродливому коду.