Pagini recente » Cod sursa (job #1611416) | Cod sursa (job #992296) | Cod sursa (job #2528093) | Cod sursa (job #1417373) | Cod sursa (job #423456)
Cod sursa(job #423456)
// Dobrota Valentin-Eugen, 324CA, PA, Tema1, Prob1 - Figuri2, 2009-2010
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define minim(x,y) ((x)<(y)?(x):(y))
int main()
{
// Declarari
int i, j, n, **p, **r;
char *line, **lines;
int maxp = 0, nrp = 0, maxr = 0, nrr = 0;
FILE *fin = fopen("figuri2.in", "r");
FILE *fout = fopen("figuri2.out", "w");
// Citiri
fscanf(fin, "%d\n", &n);
lines = (char **)malloc(n * sizeof(int *));
line = (char *)malloc((n + 2) * sizeof(int *));
p = (int **)malloc(n * sizeof(int *));
r = (int **)malloc(n * sizeof(int *));
for (i = 0; i < n; ++i) {
fgets(line, 300, fin);
lines[i] = (char *)malloc((n + 2) * sizeof(int));
strcpy(lines[i], line);
p[i] = (int *)malloc(n * sizeof(int));
r[i] = (int *)malloc(n * sizeof(int));
}
// Initializare PD
for (i = 0; i < n; i++) {
r[0][i] = p[0][i] = lines[0][i] - '0';
r[i][0] = p[i][0] = lines[i][0] - '0';
r[1][i] = lines[1][i] - '0';
r[i][n - 1] = lines[i][n - 1] - '0';
}
// PD
for (i = 1; i < n; i++)
for (j = 1; j < n; j++) {
if (lines[i][j] == '0')
p[i][j] = 0;
else
p[i][j] =
1 + minim(p[i - 1][j],
minim(p[i - 1][j - 1],
p[i][j - 1]));
if ((i != 1) && (j != n - 1)) {
if (lines[i][j] == '0')
r[i][j] = 0;
else
r[i][j] =
1 +
minim(minim
(r[i - 1][j - 1],
r[i - 1][j]),
minim(r[i - 1][j + 1],
r[i - 2][j]));
}
}
// Aflare rezultat
for (i = 0; i < n; i++)
for (j = 0; j < n; j++) {
if (p[i][j] == maxp)
nrp++;
else if (p[i][j] > maxp) {
nrp = 1;
maxp = p[i][j];
}
if (r[i][j] == maxr)
nrr++;
else if (r[i][j] > maxr) {
nrr = 1;
maxr = r[i][j];
}
}
// Afisare
fprintf(fout, "%d %d\n%d %d\n", maxp, nrp, maxr, nrr);
//Finalizare
fclose(fin);
fclose(fout);
return 0;
}