Как бы сделал я, имея некоторый опыт олимпиадного программирования (если правильно понял условия задачи)
1. Считать текстовый файл в двумерный массив.
2. Найти первую и последние ненулевые строки (слева, справа, снизу, сверху)
3. Завести 4 переменных под хранение "веса" первых ненулевых строк
4. Сравнить попарно левые и правые значения, верхние и нижние. У треугольника значения 2х сторон будут различаться, у квадрата будут равны все 4 значения(или если прямоугольник засветится, то равны попарно),
если значения всех строк равны 1, то это круг (вряд ли будет квадрат с одним пикселем)
4.1 Возможна ситуация, что круг начинается не с одного пикселя, тогда сделать разветвление в 4 пункте:
если "вес" граней одинаков, то проверить в глубину следующие стороны, если они равны внешним граням, то перед нами квадрат, если они больше внешних граней, то круг.
При условии, что фигуры не имеют дырок внутри.