Pagini recente » Cod sursa (job #710139) | Cod sursa (job #1227636) | Cod sursa (job #2433657) | Cod sursa (job #2799464) | Cod sursa (job #441545)
Cod sursa(job #441545)
#include <stdio.h>
#include <stdlib.h>
int min (int a, int b)
{
return a<b ? a : b;
}
int main (int argc, char **argv)
{
FILE *fin, *fout;
int **mat, **aux;
char *linie;
int n, i, j, m, max, cnt;
fin = fopen ("figuri2.in", "r");
fout = fopen ("figuri2.out", "w");
fscanf (fin, "%d\n", &n);
if (n<3 || n>255)
return 1;
mat = (int**)calloc(n+1, sizeof(int*));
aux = (int**)calloc(n+1, sizeof(int*));
linie = (char*)calloc(n+4, sizeof(char));
for (i=0; i<=n; i++)
{
mat[i] = (int*)calloc(n+1, sizeof(int));
aux[i] = (int*)calloc(n+1, sizeof(int));
}
for (i=1; i<=n; i++)
{
fgets (linie, n+4, fin);
for (j=1; j<=n; j++)
mat[i][j] = linie[j-1] - 48;
}
free(linie);
/*
for (j=0; j<n; j++)
{
aux[0][j] = mat[0][j];
aux[j][0] = mat[j][0];
}
for (i=0; i<n; i++)
for (j=0; j<n; j++)
aux[i][j] = mat[i][j];
*/
max = 0;
cnt = 0;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
{
m = min (min (aux[i-1][j], aux[i][j-1]), aux[i-1][j-1]);
if (mat[i][j] == 1)
aux[i][j] = m + 1;
if (aux[i][j] > max)
{
max = aux[i][j];
cnt = 0;
}
if (aux[i][j] == max)
cnt++;
}
fprintf (fout, "%d %d\n", max, cnt);
for (i=0; i<=n; i++)
for (j=0; j<=n; j++)
aux[i][j] = mat[i][j];
max = 0;
cnt = 0;
for (i=2; i<=n; i++)
for (j=1; j<n; j++)
{
m = min (min (aux[i-1][j-1], aux[i-1][j+1]), aux[i-2][j]);
if (mat[i][j] == 1 && mat[i-1][j] == 1)
aux[i][j] = m + 1;
if (aux[i][j] > max)
{
max = aux[i][j];
cnt = 0;
}
if (aux[i][j] == max)
cnt++;
}
fprintf (fout, "%d %d\n", max, cnt);
fclose (fin);
fclose (fout);
for (i=0; i<=n; i++)
{
free (mat[i]);
free (aux[i]);
}
free (mat);
free (aux);
return 0;
}