Pagini recente » Cod sursa (job #2809317) | Cod sursa (job #2122156) | Cod sursa (job #439678) | Cod sursa (job #1754675) | Cod sursa (job #435455)
Cod sursa(job #435455)
#include <stdio.h>
#include <iostream.h>
int min(int a, int b, int c)
{
int m=a;
if (m>b) m=b; //min dintre a si b
if (m<c) return m;
else return c; //min dintre toate 3
}
int min_r(int a, int b, int c, int d)
{
int m=a;
if (m>b) m=b; //min dintre a si b
if (m>c) m=c; //min dintre a si b si c
if (m<d) return m;
else return d;//minimul tuturor
}
int main()
{
int n=5,m_p[257][257],m_r[257][257],i,j,max_p[257],max_r[256],mp=0,mr=0;
char *s,s1[256];
for(i=0;i<=256;i++)
for(j=0;j<=256;j++)m_p[i][j]=0;
FILE *f1=fopen("figuri2.in","r");
FILE *f2=fopen("figuri2.out","w");
fscanf(f1,"%d\n",&n);
for(i=0;i<n;i++)
{
s=fgets(s1,257,f1);
for(j=0;j<n;j++)
{
m_p[i][j]=s[j]-'0'; //imi construiesc simultan matricile m_p si m_r care vor fi folosite pentru
m_r[i][j]=m_p[i][j]; //cazurile in care caut patrate, respectiv romburi
}
}
for(i=1;i<n;i++)
for(j=1;j<=n;j++)
if (m_p[i][j]==1)
{ //patratul nou poate fi obtinut prin patratele deja existente de deasupra sa, in stanga si in stanga-susul lui
m_p[i][j]=min(m_p[i-1][j-1],m_p[i][j-1],m_p[i-1][j])+1;
if (m_p[i][j]>mp) mp=m_p[i][j]; //mp=latura maxima a patratului
if (m_p[i][j]==mp) max_p[mp]++; //m_p[i]=numar patrate de latura i; oarecum, pentru ca pe mine ma intereseaza
//doar numarul de patrate de lungime maxima, deci celelalte valori vor fi incomplete pe masura ce se obtin laturi mai mari
}
/*for(i=0;i<n;i++)
{
for(j=0;j<n;j++){}
printf("%d",m_p[i][j]);
printf("\n");
}*/
fprintf(f2,"%d %d\n",mp,max_p[mp]);
for(i=2;i<n;i++)
for(j=1;j<n;j++)
if (m_r[i][j]==1)
{ //noul romb este obtinut din romburile din stanga-sus, sus, dreapta sus, si 2 pozitii deasupra
m_r[i][j]=min_r(m_r[i-1][j-1],m_r[i-1][j+1],m_r[i-1][j],m_r[i-2][j])+1;
//e nevoie de alta functie de minim pentru ca calculez minimul a 4 valori
if (m_r[i][j]>mr) mr=m_r[i][j]; //similar ca in cazul patratelor
if (m_r[i][j]==mr) max_r[mr]++;
}
fprintf(f2,"%d %d",mr,max_r[mr]);
printf("%d %d ",m_p[254][253],m_p[254][253]);
system("pause");
fclose(f1);fclose(f2);
return 0;
}