Cod sursa(job #428148)

Utilizator dtoniucDaniel Toniuc dtoniuc Data 28 martie 2010 21:51:46
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
using namespace std;
ofstream fout("flip.out");
int a[20][20],l[20],c[20],n,m,af=0;
void afis()
{
	int s=0;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			s+=a[i][j];
	fout<<s;
	af=1;
}
void verificare()
{
	for (int i=1;i<=n;i++)
	{
		c[i]=0;l[i]=0;
	}
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
		{
			l[i]+=a[i][j];
			c[j]+=a[i][j];
		}
	for (int i=1;i<=n;i++)
	{
		if (c[i]<0) c[i]=1;
		else c[i]=0;
		if (l[i]<0) l[i]=1;
		else l[i]=0;
	}
	/*for (int i=1;i<=n;i++)
		fout<<l[i]<<" ";
	fout<<'\n';
	for (int i=1;i<=n;i++)
		fout<<c[i]<<" ";*/
}
void bk(int k)
{
	int j;
	if (k==1) afis();
	else if (af==1);
	else for (j=1;j<=n && af==0;j++)
	{
		k=1;
		if(c[j]==1)
		{
			for (int i=1;i<=n;i++)
				a[i][j]=-a[i][j];
			/*for (int i=1;i<=n;i++)
			{
				fout<<'\n';
				for (int l=1;l<=m;l++)
					fout<<a[i][l]<<" ";
			}*/
			k=0;
			verificare();
			/*for (int i=1;i<=n;i++)
				fout<<c[i]<<" ";*/
			bk(k);
		}
		if(l[j]==1)
		{
			for (int i=1;i<=n;i++)
				a[j][i]=-a[j][i];
			k=0;
			verificare();
			bk(k);
		}
		if (j==n)bk(k);
	}
}
	
int main ()
{
	ifstream fin ("flip.in");
	fin>>n>>m;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			fin>>a[i][j];
	verificare();
	bk(0);
	return 0;
}