帮忙看一个关于八皇后的一个程序解决思路

帮忙看一个关于八皇后的一个程序
小弟是一新手,看到一个八皇后的程序,实在是看不懂,望高手注释一下:
#include <iostream.h>
class   queen
{
public:
queen(int,queen*);
        bool   findSolution();
bool   advance();
void   print();
private:
int   row;
const   int   column;
queen   *neighbor;
bool   canAttack(int,int);
};

queen::queen(int   col,queen   *ngh)
:column(col),neighbor(ngh)
{
  row=1;
}


bool   queen::canAttack(int   testRow,int   testColumn)
{
if   (row==testRow)
        return   true;
int   columnDifference=testColumn-column;
if   ((row+columnDifference==testRow)||(row-columnDifference==testRow))
        return   true;
return   neighbor&&neighbor-> canAttack(testRow,testColumn);
}


bool   queen::findSolution()
{
while   (neighbor&&neighbor-> canAttack(row,column))
        if   (!advance())
          return   false;
  return   true;  
}


bool   queen::advance()
{
if(row <8){
row++;
        return   findSolution();}
if   (neighbor&&!neighbor-> advance())
return   false;
    row=1;
    return   findSolution();
}
void   queen::print()
{
if(neighbor)
    neighbor-> print();
cout < < "( " < <row < < "   ,   " < <column < < ") " < < '\n ';
}


void   main()
{
queen   *lastQueen=0;
for   (int   i=1;i <=8;i++){
    lastQueen=new   queen(i,lastQueen);
if   (!lastQueen-> findSolution())
      cout < < "no   solution\n ";
                  }
      lastQueen-> print();
}
特别是其中关于neighbor的理解,其中两次出现(neighbor&&neighbor-> canAttack(row,column))这样的语句,其目的是什么?

------解决方案--------------------
neighbor&&neighbor-> canAttack(testRow,testColumn);

他把8王后弄成个链,这个就是递归判断当放下(testRow,testColumn)王后时,以前已经放下的王后有没有可能袭击到这个刚放下的(testRow,testColumn) 王后。

其实相当于
if ( neighbor == NULL ) return false
else return neighbor-> canAttack(testRow,testColumn);