Pagini recente » Cod sursa (job #2943788) | Cod sursa (job #2370441) | Cod sursa (job #578585) | Cod sursa (job #856067) | Cod sursa (job #2640865)
#include <iostream>
#include <fstream>
//JOCUL FLIP
using namespace std;
int n,m;
int countColChanges = 0;
int countLineChanges = 0;
int** readBoard(ifstream &inputFile){
int height;
int width;
inputFile>>height>>width;
n=height;
m=width;
int** board= new int*[n];
for (int i = 0; i<n; i++){
board[i]=new int[m];
for(int j = 0; j<m; j++){
inputFile>>board[i][j];
}
}
return board;
}
void printBoard(int** board, int n, int m, ofstream &outputFile){
int Result=0;
for(int i = 0; i < n ; i++){
for(int j = 0; j < m; j++){
Result=Result+board[i][j];
cout<<board[i][j]<<" ";
}
cout<<endl;
}
outputFile<<Result;
}
void changeLinePolarity(int** board, int lineIndex){
for(int j = 0 ; j < m ; j++){
board[lineIndex][j] = board[lineIndex][j]*(-1);
}
}
void changeColumnPolarity(int** board, int columnIndex){
for(int i = 0 ; i < n ; i++){
board[i][columnIndex] = board[i][columnIndex]*(-1);
}
}
void solveBoard(int** board, ofstream &outputFile){
countColChanges = 0;
countLineChanges = 0;
int negPolarityLine = 0;
int posPolarityLine = 0;
int negPolarityCol = 0;
int posPolarityCol = 0;
bool doItAgain = true;
bool iSaidDoItAgain = true;
bool lineMightChange = false;
bool columnMightChange = false;
while(doItAgain){
doItAgain=false;
for(int i = 0; i < n; i++){
columnMightChange = false;
for(int j = 0; j<m ;j++){
if(board[i][j]<0){
negPolarityLine+=board[i][j];
}else{
posPolarityLine+=board[i][j];
}
negPolarityLine = 0;
posPolarityLine = 0;
}
if (abs(negPolarityLine)>abs(posPolarityLine)){
columnMightChange=true;
changeLinePolarity(board, i);
countLineChanges++;
}
}
for(int j = 0; j<m ;j++){
lineMightChange=false;
for(int i = 0; i<n ;i++){
if(board[i][j]<0){
negPolarityCol+=board[i][j];
}else{
posPolarityCol+=board[i][j];
}
}
if (abs(negPolarityCol)>abs(posPolarityCol)){
lineMightChange = true;
changeColumnPolarity(board, j);
countColChanges++;
}
negPolarityCol = 0;
posPolarityCol = 0;
}
if(lineMightChange || columnMightChange){
doItAgain=true;
lineMightChange = false;
columnMightChange = false;
}else{
doItAgain=false;
}
}
cout<<"LineChanges"<<countLineChanges;
cout<<"ColumnChanges"<< countColChanges;
cout<<endl;
printBoard(board,n,m,outputFile);
}
int main()
{
ifstream f("flip.in");
ofstream g("flip.out");
int **board;
board = readBoard(f);
solveBoard(board,g);
return 0;
}