Pagini recente » Cod sursa (job #1977628) | Cod sursa (job #2179941) | Cod sursa (job #370689) | Cod sursa (job #2644991) | Cod sursa (job #858862)
Cod sursa(job #858862)
#include<stdio.h>
int n,m,a[16][16],am[16][16],b[32],snou,svechi=0; //am este matricea modificata
void init() //intializeaza matricea b[n+m] care contine numarul binar
{
int i;
for (i=0; i<n+m; i++)
b[i]=0;
}
void afisbin() //afiseaza numarul binar (b[n+m]) **test purposes**
{
int i;
for (i = 0; i < n+m; i++)
printf ("%-2i",b[i]);
printf("\n");
}
void bin(int k) //generarea numerelor binare
{
if (k>n+m-1)
{
changemat(); //schimba matricea
snou = suma(); //genereaza suma noua
if (snou > svechi) svechi = snou;
restoremat();
}
else
{
b[k] = 0; bin(k + 1);
b[k] = 1; bin(k + 1);
}
}
void restoremat()
{
int i,j;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
am[i][j]=a[i][j];
}
void cit() //citirea datelor din fisier
{
FILE *f; int i,j;
f=fopen("flip.in","r");
fscanf(f,"%i%i",&n,&m);
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
{
fscanf(f,"%i",&a[i][j]);
am[i][j]=a[i][j]; //initializeaza matricea modifica am[i][j]
}
fclose(f);
}
void afismat() //afisarea matricei a[n][m] **for test purpose only**
{
int i,j;
for (i = 0; i < n; i++ )
{
if (i != 0) printf("\n");
for (j = 0; j < m; j++)
printf ("%-3i",am[i][j]);
}
}
void rind(int k) //inmulteste rindul k cu -1
{
int i;
if (k<n)
for (i = 0; i < m; i++)
am[k][i] = -am[k][i];
else printf("ERROR K PREA MARE RIND");
}
void coloana(int k) //inmulteste coloana k cu -1
{
int i;
if (k<m)
for (i = 0; i < n; i++)
am[i][k] = -am[i][k];
else printf ("ERROR K PREA MARE COLOANA");
}
int suma()
{
int i,j,s=0;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
s=s+am[i][j];
return s;
}
void changemat()
{
int i;
for (i = 0; i < n+m; i++)
{
if (b[i] == 1 && i < n) rind(i);
else if (b[i] == 1 && i >= m) coloana(i-n);
}
}
void inscrierea(int s) //rezultat => flip.out
{
FILE *f;
f=fopen("flip.out","w");
fprintf(f,"%i",s);
fclose(f);
}
int main()
{
int i,j;
cit();
bin(0);
inscrierea(svechi);
return 0;
}