#include #include #include #define min( a, b ) ((a=0; k--) D[k][j]= (zn[k][j]=='-') ? D[k+1][j]+1 : 0; } /* for( j=0; j<10; j++ ) { for (k=0; k<10; k++ ) printf( "%d ", U[j][k] ); printf( "\n" ); } for( j=0; j<10; j++ ) { for (k=0; k<10; k++ ) printf( "%d ", D[j][k] ); printf( "\n" ); } */ for (k=1; k<=n; k++) { st=k; while (st<2*n) { if (U[k][st]>0) { p=0; pom[st-1]=0; while (U[k][st]) { pom[st]=p=min(p+1, U[k][st]); st++; } end=st--; p=0; while (U[k][st]) { p=min(p+1, U[k][st]); m=min(p, pom[st]); if ((m>maxsize) && ((k+st-m+1)%2==1) ) maxsize=m; st--; } st=end; } else st++; } st=k; while (st<2*n) { if (D[k][st]>0) { p=0; pom[st-1]=0; while (D[k][st]) { pom[st]=p=min(p+1, D[k][st]); st++; } end=st--; p=0; while (D[k][st]) { p=min(p+1, D[k][st]); m=min(p, pom[st]); if ((m>maxsize) && ((k+st-m+1)%2==0)) maxsize=m; st--; } st=end; } else st++; } } printf( "Triangle #%d\n", i); printf( "The largest triangle area is %d.\n", maxsize*maxsize ); putchar( '\n' ); } }