Pagini recente » Atasamentele paginii Clasament 1212121 | Istoria paginii runda/123455 | Cod sursa (job #2797567) | Cod sursa (job #1029032) | Cod sursa (job #441069)
Cod sursa(job #441069)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int minim(int x,int y,int z)
{
int min1=x,min2=0;
if(y>z)
min2=z;
else
min2=y;
return min1>min2? min2:min1;
}
int minim2(int x,int y,int z,int w)
{
int min1=0,min2=0;
if(x>y)
min1=y;
else min1=x;
if(z>w)
min2=w;
else
min2=z;
return min1>min2? min2:min1;
}
int main()
{
FILE *fis=fopen("figuri2.in","r");
FILE *fis_out=fopen("figuri2.out","w");
int n,i,j,max=0,max2=0,nr=0,nr2=0;
fscanf(fis,"%i",&n);
char a[n][n],s[n];
int aux[n][n],aux2[n][n];
for ( i = 0; i < n; i++) //construiesc matricea cu datele din fisier
{
fscanf(fis,"%s",s);
for(j=0;j<n;j++)
a[i][j]=s[j];
}
//matrice patrat
for( i=0;i<n;i++)
for( j=0;j<n;j++)
if(i==0|| j==0)
aux[i][j]=(a[i][j]-'0');
for( i=1;i<n;i++)
for( j=1;j<n;j++)
{
if((a[i][j]-'0')==0)
aux[i][j]=0;
else
aux[i][j]=1+minim(aux[i-1][j-1],aux[i][j-1],aux[i-1][j]);
}
//matrice romb
for( i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==0|| i==1|| j==0 || j==n-1)
aux2[i][j]=(a[i][j]-'0');
for(i=2;i<n;i++)
for(j=1;j<n-1;j++)
{
if((a[i][j]-'0')==0)
aux2[i][j]=0;
else
aux2[i][j]=1+minim2(aux2[i-1][j-1],aux2[i-1][j],aux2[i-1][j+1],aux2[i-2][j]);
}
//prelucrari
int ok=0,ok2=0;
for( i=0;i<n;i++)
for(j=0;j<n;j++)
{ if(aux[i][j] > max)
{ max=aux[i][j];
ok=1;
}
if(aux2[i][j] > max2)
{ max2=aux2[i][j];
ok2=1;
}
}
for( i=0;i<n;i++)
for(j=0;j<n;j++)
{if(aux[i][j]==max && ok==1)
nr++;
if(aux2[i][j]==max2 && ok2==1)
nr2++;
}
fprintf(fis_out,"%i %i\n",max,nr);
fprintf(fis_out,"%i %i",max2,nr2);
return 0;
}