8 皇后问题

#include  < iostream >
using   namespace  std;
#define  QUEEN_NUM 8
int  position[QUEEN_NUM]; // 每一行的皇后放在第几列
int  totalNum = 0 ;
void  placeQueen( const   int  row) // 放在第几行
{
    
if  (row >= QUEEN_NUM)
    {
        
for  ( int  i = 0 ;i < QUEEN_NUM;i ++ )
        {
            cout
<< position[i] << "   " ;
        }
        cout
<< endl;
        totalNum
++ ;
        
return ; // 放置完了
    }
    
bool  canPutHere = true ;
    
for  ( int  i = 0 ;i < QUEEN_NUM;i ++ ) // 检查当前行的每一列是否与前面已经放置的某一个皇后冲突
    {
        canPutHere
= true ;
        
for  ( int  r = 0 ;r < row;r ++ ) // 已经放了row-1个皇后
        {
            
if  (position[r] == i // 在同一列
                 || position[r] == i + r - row // 在同一对角线上
                 || position[r] == i - (r - row))
            {
                canPutHere
= false ;
                
break ;
            }
        }
        
if  (canPutHere)
        {
            position[row]
= i;
            placeQueen(row
+ 1 );
        }
    }
}
void  main()
{
    placeQueen(
0 );
    cout
<< " Total Num:  " << totalNum << endl;
}
Homepage: http://www.zoumin.org/
Posted on 2010-09-27 17:44 邹敏 阅读(83) 评论(0)   编辑  收藏 引用

你可能感兴趣的:(8 皇后问题)