#include char T[500][500]; int Num=1,H; FILE *IF; char ss[500]; /* void Flip(void) { int i,j; char s[500][500]; for (i=0; i < H; i++) for (j=0; j < 205;j++) s[i][j] = T[i][j]; for (i=0; i < H; i++) for (j=0; j < 205;j++) T[H-1-i][j] = s[i][j]; } */ int Try(int n, int i , int j) { int x,y,s,sn; sn = n; x = i; y = j; for (; n; n--) { for (s=0; s < (2*n-1); s++) if (!T[y][x+s]) goto no; y++; x++; } return 1; no: n = sn; if (j >= (n-1)) { x = i; y = j; for (; n; n--) { for (s=0; s < (2*n-1); s++) if (!T[y][x+s]) return 0; y--; x++; } return 1; } else return 0; } int main() { int i,j,n; IF = fopen("triangle.in","r"); while(1) { start: fscanf(IF,"%d",&H); if (!H) break; for (i=0; i < 500; i++) for(j=0; j < 500;j++) T[i][j] = 0; fgets(ss,250,IF); for (i=0; i < H; i++) { fscanf(IF,"%s",&T[i][i]); } for (i=0; i < 500; i++) for(j=0; j < 500;j++) if (T[i][j] == '-') T[i][j] = 1; else T[i][j] = 0; printf("Triangle #%d\n",Num++); for (n=H; n ; n--) { for (i=0; i < (2*H - 1); i++) { for (j=0; j < H; j++) if (Try(n,i,j)) { printf("The largest triangle area is %d.\n\n",n*n); goto start; } } } printf("The largest triangle area is 0.\n\n"); } return 0; }