正宗的八皇后,需要注意vis[i]中的元素个数一定是超过八个的 #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> using namespace std ; int map[8][8] , ans , vis[3][30] , ncase , c[8] ; void init() { ans = 0 ; memset( map , 0 , sizeof( map ) ) ; memset( vis , 0 , sizeof( vis ) ) ; return ; } void input() { for( int i = 0 ; i < 8 ; ++i ) for( int j = 0 ; j < 8 ; ++j ) cin >> map[i][j] ; return ; } bool is_ok( int c , int cur ) { if( vis[0][c] || vis[1][cur+c] || vis[2][cur-c+8] ) return false ; return true ; } void dfs( int cur , int tans ) { if( cur == 8 ) { if( tans > ans ) { ans = tans ; } return ; } for( int i = 0 ; i < 8 ; ++i ) if( is_ok( i , cur ) ) { vis[0][i] = vis[1][cur+i] = vis[2][cur-i+8] = 1 ; dfs( cur+1 , tans+map[cur][i] ) ; vis[0][i] = vis[1][cur+i] = vis[2][cur-i+8] = 0 ; } return ; } void solve() { dfs( 0 , 0 ) ; return ; } void output() { printf( "%5d/n" , ans ) ; return ; } int main() { cin >> ncase ; while( ncase-- ) { init() ; input() ; solve() ; output() ; } return 0 ; }