1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
#include <limits>
template< std::size_t N >
int max_sum( const int (&matrix) [N][N], std::size_t start_row,
bool (&available_columns)[N] )
{
if( start_row >= N ) return 0 ;
const int (&row)[N] = matrix[start_row] ;
int max_value = std::numeric_limits<int>::min() ;
for( std::size_t i = 0 ; i < N ; ++i )
{
if( available_columns[i] )
{
available_columns[i] = false ;
int sum = row[i] + max_sum( matrix, start_row+1, available_columns ) ;
if( sum > max_value ) max_value = sum ;
available_columns[i] = true ;
}
}
return max_value ;
}
#include <iostream>
int main()
{
enum { N = 3 } ;
const int matrix[N][N] = { {4,6,5}, {6,5,9}, {4,5,3} } ;
bool available[N] = { true, true, true } ;
std::cout << max_sum( matrix, 0, available ) << '\n' ;
}
|