Pagini recente » Cod sursa (job #984180) | Cod sursa (job #2138900) | Cod sursa (job #1880474) | Cod sursa (job #827675) | Cod sursa (job #514030)
Cod sursa(job #514030)
#include <fstream>
#include <string>
using namespace std;
int g_nMatrix[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_nMatrix[iii][rnIndex] : g_nMatrix[rnIndex][iii]) *= -1;
}
int CalculateSum ()
{
int nSum = 0;
for (int iii = 0; iii < g_nVerticalSize; iii++)
for (int jjj = 0; jjj < g_nHorizontalSize; jjj++)
nSum += g_nMatrix[iii][jjj];
return nSum;
}
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_nMatrix[iii][jjj];
in.close();
Backtrack (0, 0);
return 0;
}