//用N皇后改的,很勉强.
#include <iostream>
#include <string.h>
using namespace std;
const int N=5;
int matrix[N][N]={1, 2, 3, 4, 5,
2, 5, 4, 1, 4,
6, 1, 4, 5, 0,
10, 2, 1, 1, 3,
5, 6, 9, 1, 1,
};
int max_sum;
int max_array[N];
bool is_right_pos(int * row_matrix,int row,int column)
{
for(int k=0;k<row;k++)
if(column==row_matrix[k])
return false;
return true;
}
void Trail(int i,int *b)
{
static bool isfirst=true;
if(i==N)
{
int sum=0;
int k=0;
for(;k<N;k++)
sum+=matrix[k][b[k]];
if(isfirst)
{
max_sum=sum;
isfirst=false;
}
else
{
if(max_sum<sum)
{
max_sum=sum;
memcpy(max_array,b,sizeof(int)*N);
}
}
}
else
{
for(int j=0;j<N;j++)
if(is_right_pos(b,i,j))
{
b[i]=j;
Trail(i+1,b);
}
}
}
void main()
{
int row_matrix[N];
Trail(0,row_matrix);
cout<<"the max sum array is:";
for(int i=0;i<N;i++)
cout<<matrix[i][max_array[i]]<<" ";
cout<<"the max sum is:"<<max_sum<<endl;
}