Pagini recente » Cod sursa (job #1750901) | Cod sursa (job #1235213) | Cod sursa (job #3269322) | Cod sursa (job #64509) | Cod sursa (job #514035)
Cod sursa(job #514035)
#include <fstream>
#include <string>
using namespace std;
long int g_lnMatrix[16][16];
int g_nVerticalSize = 1, g_nHorizontalSize = 1;
string Line = "Line", Column = "Column";
void Flip (const int &rnIndex, string strWhat)
{
for (int iii = 0; iii < ((strWhat == "Line") ? g_nVerticalSize : g_nHorizontalSize); iii++)
((strWhat == "Line") ? g_lnMatrix[iii][rnIndex] : g_lnMatrix[rnIndex][iii]) *= -1;
}
long int CalculateSum ()
{
long int lnSum = 0;
for (int iii = 0; iii < g_nVerticalSize; iii++)
for (int jjj = 0; jjj < g_nHorizontalSize; jjj++)
lnSum += g_lnMatrix[iii][jjj];
return lnSum;
}
void Backtrack (int nVertIndex, int nHorizIndex)
{
if (nHorizIndex == g_nHorizontalSize)
{
ofstream out ("flip.out");
out << CalculateSum ();
out.close();
}
else if (nVertIndex == g_nVerticalSize)
{
int nSum = CalculateSum ();
Flip (nHorizIndex, Line);
int nSumAfterFlip = CalculateSum ();
if (nSumAfterFlip > nSum)
Backtrack (nVertIndex, nHorizIndex + 1);
else
{
Flip (nHorizIndex, Line);
Backtrack (nVertIndex, nHorizIndex + 1);
}
}
else
{
int nSum = CalculateSum ();
Flip (nVertIndex, Column);
int nSumAfterFlip = CalculateSum ();
if (nSumAfterFlip > nSum)
Backtrack (nVertIndex + 1, nHorizIndex);
else
{
Flip (nVertIndex, Column);
Backtrack (nVertIndex + 1, nHorizIndex);
}
}
}
int main ()
{
ifstream in ("flip.in");
in >> g_nVerticalSize >> g_nHorizontalSize;
for (int iii = 0; iii < g_nVerticalSize; iii++)
for (int jjj = 0; jjj < g_nHorizontalSize; jjj++)
in >> g_lnMatrix[iii][jjj];
in.close();
Backtrack (0, 0);
return 0;
}