Это слишком долго для комментария. Я выложу свое решение позже, если вы не сможете его решить, но вот как я это сделал (менее 15 строк кода): сначала я создал второй массив (немного большой [n + 2] [ п + 2]) и сделал п/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
в случае, если ненулевое число х означает «Я центр ромба размером х» (я выражающее размер по отношению с длина диагоналей [равных в вашем случае] ромба). Вы можете найти, если у вас есть центр ромба размера (k + 1), проверяя, являются ли (верхние, правые, нижние, левые) все центры ромба размера k.
Преимущество первого создания большего массива состоит в том, что он действительно упрощает вашу логику, но я мог бы сделать это на месте с более сложной логикой, изменив исходный массив или используя второй массив того же размера, что и вход (опять же, проще просто поставить безопасный «забор» всех нулей вокруг вашего ввода).
Если вы не «окружаете» ваш массив ограждением, у вас есть много дополнительных проверок if/else: это будет подвержено ошибкам, приведет к большему коду и приведет к уродливому коду.
У нас, вероятно, есть тонны идей, но это не наша домашняя работа. Что вы сделали? –
По определению ромб должен иметь четыре стороны одинаковой длины, но не обязательно иметь внутренние углы 90 градусов. Вам нужно найти самый большой ромб любого вида или __only__ самый большой квадрат с 45 градусами поворота? (Я предполагаю, что вы имели в виду 45 градусов из-за результата вашего образца, квадрат с поворотным углом на 90 градусов идентичен оригиналу.) – Pops
@Lord Torgamus: это, очевидно, из представления, используемого для представления «2D-массива», самого большого 45 -degrees rotated square ... (я имею в виду, в противном случае удача в решении этой проблемы из-за проблем с рисованием линии/пересечением/точностью;) – SyntaxT3rr0r