//纯八皇后问题,没什么好说的
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int map[10][10];
int sum, max, C[20000];
void dfs( int cur )
{
int i, j, ok;
if( cur == 8 )
{
sum = 0;
for( i = 0; i < 8; i++ )
sum += map[i][C[i]];
if( sum > max )
max = sum;
}
else for( i = 0; i < 8; i++ )
{
ok = 1;
C[cur] = i;
for( j = 0; j < cur; j++ )
if( C[cur] == C[j] || i-cur == C[j]-j || i+cur == C[j] + j )
{ ok = 0; break; }
if( ok )
{
dfs( cur+1 );
}
}
}
int main()
{
int N, i, j;
scanf( "%d", &N );
while( N-- )
{
for( i = 0; i < 8; i++ )
{
for( j = 0; j < 8; j++ )
scanf( "%d", &map[i][j] );
scanf( "\n" );
}
max = -1;
dfs( 0 );
printf( "%5d\n", max );
}
return 0;
}
UVA 167
最新推荐文章于 2020-01-14 18:12:26 发布