f1514.cpp
资源名称:c.rar [点击查看]
上传用户:puke2000
上传日期:2022-07-25
资源大小:912k
文件大小:1k
源码类别:

C#编程

开发平台:

Visual C++

  1. //=====================================
  2. // f1514.cpp
  3. // n queen's problem sulotion
  4. //=====================================
  5. #include<iostream>
  6. #include<vector>
  7. #include<fstream>
  8. using namespace std;
  9. //-------------------------------------
  10. typedef vector<vector<int> > Mat;
  11. void queen(int r, int c, Mat);
  12. void print(const Mat& m);
  13. //-------------------------------------
  14. int main(){
  15.   ifstream in("queen.in");
  16.   for(int n; in>>n; )
  17.     try{
  18.       Mat m(n, vector<int>(n,0));
  19.       for(int i=0; i<n; ++i) queen(0,i,m);
  20.       cout<<"NoSolutionsnn";
  21.     }catch(Mat& m){ print(m); }
  22. }//------------------------------------
  23. void queen(int r, int c, Mat m){
  24.   m[r][c] = 2;
  25.   for(int k=1; k<m.size()-r; ++k){
  26.     m[r+k][c]=1;
  27.     if(c-k>=0) m[r+k][c-k]=1;
  28.     if(c+k<m.size()) m[r+k][c+k]=1;
  29.   }
  30.   for(int j=0; j<m.size(); ++j)
  31.     if(m[r+1][j]==0)
  32.       if(r+2==m.size()){ m[r+1][j]=2; throw m; }
  33.       else queen(r+1,j,m);
  34. }//------------------------------------
  35. void print(const Mat& m){
  36.   for(int i=0; i<m.size(); ++i){
  37.     for(int j=0; j<m.size(); ++j)
  38.       cout<<(m[i][j]==2 ? '*' : '-');
  39.     cout<<"n";
  40.   }
  41.   cout<<"n";
  42. }//====================================
  43.