Pagini recente » Cod sursa (job #2511549) | Monitorul de evaluare | Cod sursa (job #1185458) | Cod sursa (job #2283099) | Cod sursa (job #436190)
Cod sursa(job #436190)
#include <stdio.h>
#include <stdlib.h>
//functie care calculeaza minimul dintre 3 numere intregi
int minim(int a, int b, int c){
int min;
if(a<b)
min=a;
else
min=b;
if(min<c)
return min;
else
return c;
}
//functie care calculeaza elem maxim dintr-o matrice
int maxim(int a[257][257], int n){
int i,j;
int max = a[0][0];
for(i =0; i<n; i++)
for(j = 0; j<n; j++)
if(max < a[i][j])
max = a[i][j];
return max;
}
int main(){
int i,j,n;
int a[257][257], best[257][257];
FILE* f=fopen("figuri2.in","r");
FILE* g=fopen("figuri2.out","w");
char x[257];
fscanf(f,"%d",&n);
i=0;
fgets(x,sizeof(x),f);
//citire date de intrare : folosind fgets, am citit cate o linie din fisier intr-un sir
while((fgets(x,sizeof(x),f))!=NULL){
for(j = 0; j<n; j++){
if(x[j] == '1')
a[i][j] = 1;
if(x[j] == '0')
a[i][j] = 0;
}
i++;
}
/* for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}*/
/* patrat */
//construim matricea best
for(i=0;i<n;i++)
for(j=0;j<n;j++){
if(j==0 || i==0) //prima linie si prima coloana din matricea a se copiaza in matricea best
best[i][j]=a[i][j];
else
if(a[i][j] == 0)
best[i][j]=0;
else
best[i][j]=1+minim(best[i-1][j], best[i][j-1], best[i-1][j-1]);//calculez lungimea laturii patratului, folosind o formula de recurenta care ne-a fost prezentata si la laborator
}
// printf("\n");
/*for(i =1; i <=n ;i++)
{ for(j =1 ;j<=n;j++)
printf("%d ",b[i][j]);
printf("\n");*/
int NP=0,LP;
LP=maxim(best,n);
for(i=0;i<n;i++)
for(j=0;j<n;j++){
if(LP==best[i][j])
NP++;
}
fprintf(g,"%d %d\n", LP,NP);
/* romb */
//initializare matrice
for(i = 0; i <n; i ++)
for(j = 0; j <n; j ++)
best[i][j] = 0;
for(i = 0; i <n; i ++){
best[i][0] = a[i][0];
best[i][n-1] = a[i][n-1];
best[0][i] = a[0][i];
best[1][i] = a[1][i];
}
for(i = 2; i <n; i ++)
for(j = 1; j <n-1; j++)
if(a[i][j] == 1){
best[i][j]=1+minim(best[i-1][j-1],best[i-1][j+1],best[i-2][j]);}
/*for(i =0; i <n ;i++)
{ for(j =0 ;j<n;j++)
printf("%d ",best[i][j]);
printf("\n");}*/
//verific care este patratul de lungime maxima
//int max=1, p,q,nr=0;
int LR,NR=0;
LR=maxim(best,n);
//verific cate patrate de lungime maxima pot fi in matrice
//am folosit un contor (nr) pe care il incrementez de fiecare data cand gasesc in matricea best lungimea maxima a laturii patratului (care se afla pe pozitia coltului stanga jos al patratului) }
for(i=0;i<n;i++)
for(j=0;j<n;j++){
if(LR==best[i][j])
NR++;
}
fprintf(g,"%d %d", LR,NR);
fclose(f);
fclose(g);
return 0;
}