Pagini recente » Cod sursa (job #1869573) | Cod sursa (job #1869204) | Cod sursa (job #944156) | Cod sursa (job #382724) | Cod sursa (job #441082)
Cod sursa(job #441082)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int b[256][256];
//functie care returneaza minimul intre 4 int-uri sau 3
//in functie de bool romb;
int min(bool romb,int a, int b, int c, int d)
{
int minim;
minim = a;
if ( b < minim ) minim = b;
if ( c < minim ) minim = c;
if ( romb ) if ( d < minim ) minim = d;
return minim;
}
void problema(char figura, int n, FILE *g)
{
//in functie de parametrul 'figura' trimis functiei
//se calculeaza patrate sau romburi
int _figura = 0;
switch (figura)
{
case 'P':
_figura = 1;
break;
case 'R':
_figura = 2;
break;
}
//latura_max -> latura maxima a unei figuri(fie patrat fie romb)
//nr_max -> numarul maxim de figuri de latura maxima
int latura_max = 0, nr_max = 0, i, j;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
if ( b[i][j] == 1 )
{
/*
daca b[i][j] este 1 se reinitializaeaza b[i][j] cu minimul
dintre : - stanga sus
- sus
- stanga
pt patrat
si - sus stanga
- sus dreapta
- sus
- 2x sus
pt romb
astfel avand pe pozitia b[i][j] lungimea maxima pt un romb
sau patrat in acea pozitie
*/
if ( _figura == 1 ) b[i][j] = min(false, b[i][j-1], b[i-1][j], b[i-1][j-1], 0 ) + 1;
if ( _figura == 2 ) b[i][j] = min(true, b[i-1][j-1],b[i-1][j],b[i-1][j+1],b[i-2][j])+1;
if ( b[i][j] > latura_max )
{
//daca se gaseste alt maxim
//el devine noul maxim
//contorul figurilor fiind resetat
nr_max = 1;
latura_max = b[i][j];
}
else if ( b[i][j] == latura_max ) nr_max++; // se incrementeaza contorul figurilor
}
}
fprintf(g,"%d %d",latura_max, nr_max);
}
int main()
{
FILE *in;
in=fopen("figuri2.in","r");
FILE *g;
g=fopen("figuri2.out","w");
int n;
char x;
int i=0, j=0;
int c[256][256];
fscanf(in,"%d",&n);
for ( i=0; i<n; i++ ){
fscanf(in,"\n");
for ( j=0; j<n; j++ )
{
fscanf(in,"%c",&x);
c[i][j] = x -'0';
b[i][j] = x -'0';
}
}
fclose(in);
//calcul patrate
problema('P', n, g);
//se reface matricea initiala pt a apela
//functia cu parametru R pt calculul
//figurilor romb
fprintf(g,"\n");
for (i=0; i<n; i++)
for (j=0; j<n; j++) b[i][j] = c[i][j];
//calcul romburi
problema('R', n, g);
fclose(g);
return 0;
}