⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nqueenpartial.cpp

📁 C++&datastructure书籍源码,以前外教提供现在与大家共享
💻 CPP
字号:
class Queens
{
  public:
    Queens(int size);
    bool Solve();                   // return true if solvable
    void Print(ostream& out) const; // print the last board
  private:
    // helper functions
    bool NoQueensAttackingAt(int r, int c) const;
    bool SolveAtCol(int col);

    tmatrix<bool> myBoard;          // the board
};

bool Queens::NoQueensAttackingAt(int r, int c) const
// post: return true if row clear and diagonals crossing at
//       (row,col) clear

bool Queens::Solve()
// post: return true if n queens can be placed
{
    return SolveAtCol(0);
}

bool Queens::SolveAtCol(int col)
// pre: queens placed at columns 0,1,...,col-1
// post: returns true if queen can be placed in column col
//       if col == size of board, then n queens are placed
{
    int k;
    int rows = myBoard.numrows();
    if (col == rows) return true;  // N queens placed
    for(k=0; k < rows; k++)
    {   if (NoQueensAttackingAt(k,col))  // can place here?
        {   myBoard[k][col] = true;      // try it
            if (SolveAtCol(col+1))       // recurse
            {    return true;
            }
            myBoard[k][col] = false;     // backtrack
        }
    }
    return false;
}

int main()
{
    int size = PromptRange("size of board: ",2,12);
    Queens nq(size);
    if (nq.Solve())
    {   nq.Print(cout);
    }
    else
    {   cout << "no solution found" << endl;
    }
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -