privatestaticvoidSearchMaxSum(int row, int[] columns, int searchTo) { int sum = GetSum(columns, row); if (row == searchTo + 1) { if (sum > MaxSum) { MaxSum = sum; } } else { int possibleMax = sum; for (int curRow = row; curRow <= searchTo; curRow++) { possibleMax += MaxNumber[curRow]; }
if (possibleMax < MaxSum) { return; }
for (int col = 0; col < MatrixLength; col++) { if (CheckValid(columns, row, col)) { columns[row] = col; SearchMaxSum(row + 1, columns, searchTo); } } } }
privatestaticboolCheckValid(int[] columns, int row, int col) { for (int i = 0; i < row; i++) { if (columns[i] == col) { returnfalse; } }
returntrue; }
privatestaticintGetSum(int[] columns, int row) { int sum = 0; for (int i = 0; i < row; i++) { sum += matrix[i, columns[i]]; }
return sum; }
privatestaticvoidInitMaxNumber() { for (int i = 0; i < MatrixLength; i++) { int max = 0; for (int j = 0; j < MatrixLength; j++) { if (matrix[i, j] > max) { max = matrix[i, j]; } }