| 
			
	
	
		 #include <cmath> 
  #include <iostream> 
  #include <fstream> 
  using namespace std; 
  
  const int N=8;                                    //默认为八皇后. 
  int count=0; 
  void Display(int * RowLoc,ostream &c) 
    { 
   
  c<<"---------------"<< ++count <<"-------"<<endl; 
  for (int i=0;i<N;i++) 
     { 
  for (int j=0;j<N;j++) 
     { 
  c<< (RowLoc[i]==j ? " 1 ":" 0 "); 
  } 
  c<<endl; 
  } 
  c<<"------------------------------------"<<endl; 
  } 
  
  //核心函数,从那图(邻接矩阵)的深度遍历中体会到.Prim项目中,那找二点中最短路径的算法 
  
  void Queue(int * RowLoc,ostream & c,int nRow=0)                //RowLoc保存每一行中,皇后所在的位置,下标从0开始.  nRow表示将要填充第nRow+1行 
    { 
  if (nRow==N)                                //填充到第八行了,结束.递归返回 
     { 
  Display(RowLoc,c); 
  return; 
  } 
   
  for (int col =0;col<N;col++)                //每一行从左到右填充,共N次 
     { 
  //看第nRow行与它前面的几行是否有冲突 
  for (int RowBefore=0;RowBefore<nRow;RowBefore++) 
     { 
  //当前要放点(nRow,col)与它前面行(RowBefore,RowLoc[RowBefore])皇后检测, 
  if (abs(col-RowLoc[RowBefore])==abs(nRow-RowBefore) || col==RowLoc[RowBefore]) 
  goto nextcol;                //不能放置在此.测试同行下一列的位置 
  } 
  RowLoc[nRow]=col;                    //当前行放置成功,开始填下一行 
  Queue(RowLoc,c,nRow+1); 
  nextcol:; 
  } 
  } 
  
  void main() 
    { 
   int temp[N]=  {0}; 
  ofstream f; 
  f.open("list.txt"); 
  if (f.is_open()) 
     { 
  Queue(temp,cout); 
  Queue(temp,f); 
  cout<<"Succeed write data to  \"list.txt\" file\n"<<endl; 
  } 
  f.close(); 
  system("pause"); 
  } 
    
	    
    
 |