#include
#include
using namespace std ;
int iCount = 0 ;
void pintf(int qp[8][8] )
{
for ( int i = 0 ; i < 8 ; i ++)
{
for ( int j = 0 ; j < 8 ; j++)
{ if ( qp[i][j] > 6 )
cout<< " 皇 " ;
else
cout<< " * " ;
// cout<< " " << qp[i][j] ;
}
cout << endl ;
}
cout << endl ;
cout << endl ;
}
void fz( int qp[8][8] , int wz[5][2] , int iIndex , int ii , int jj)
{
if ( iIndex == 5 )
{ for ( int i = 0 ; i < 8 ; i ++)
{
for ( int j = 0 ; j < 8 ; j++)
{
if ( qp[i][j] == 0 )
return ;
}
} iCount ++ ;
cout<< "方式 " << iCount << endl ;
pintf(qp); return ;
} for ( int i = ii ; i < 8 ; i++)
{
for ( int j = jj ; j < 8 ; j++)
{
if ( qp[i][j] == 0 )
{
for ( int m = 0 ; m < 8 ; m++) //设置
{
for ( int n = 0 ; n < 8 ; n++)
{
if ( m == i || n == j ) //同行或同列
qp[m][n] += 1 ;
else if ( m-n == i-j || n+m == i+j ) //对角线
{
qp[m][n] += 1 ;
}
}
} qp[i][j] += 6 ;
wz[iIndex ][ 0 ] = i;
wz[iIndex ][ 1 ] = j;
//cout<< i << " " << j << " " << iIndex << endl ;
fz( qp , wz, iIndex+1 , i , 0 ) ;
//还原
qp[i][j] -= 6 ;
for ( int m = 0 ; m < 8 ; m++) //设置
{
for ( int n = 0 ; n < 8 ; n++)
{
if ( m == i || n == j ) //同行或同列
{
qp[m][n] -= 1 ;
}
else if ( m-n == i-j || n+m == i+j ) //对角线
{
qp[m][n] -= 1 ;
}
}
}
}
}
}
}main()
{
int qp[8][8] , wz[5][2] ;
//init
for ( int i = 0 ; i < 8 ; i++)
{
for ( int j = 0 ; j < 8 ; j++)
{
qp[i][j] = 0 ;
}
}
iCount = 0 ;
fz( qp , wz , 0 , 0 , 0 ) ;
cout<< "共计方式 " << iCount << endl ;}