Question: #include #include #include #include #include class NQueensSolver { private: std::random _ device rd; std::mt 1 9 9 3 7 gen; int getConflicts ( const std::vector&
#include #include #include #include #include class NQueensSolver private: std::randomdevice rd; std::mt gen; int getConflictsconst std::vector& board, int row, int col, int n int conflicts ; for int i ; i n; i if i row continue; if boardi col absi row absboardi col conflicts; return conflicts; public: NQueensSolver : genrd std::vector solveint n int maxSteps auto start std::chrono::highresolutionclock::now; Initial random placement std::vector boardn; std::uniformintdistribution dis n; for int i ; i n; i boardi disgen; MinConflicts algorithm for int step ; step maxSteps n; step Find a queen with conflicts int row disgen; int currentConflicts getConflictsboard row, boardrow n; if currentConflicts continue; Find position with minimum conflicts int minConflicts n; std::vector bestCols; for int col ; col n; col int conflicts getConflictsboard row, col, n; if conflicts minConflicts minConflicts conflicts; bestCols.clear; bestCols.pushbackcol; else if conflicts minConflicts bestCols.pushbackcol; Move queen to random best position boardrow bestColsdisgen bestCols.size; Check if solved bool solved true; for int i ; i n && solved; i if getConflictsboard i boardi n solved false; if solved if n auto end std::chrono::highresolutionclock::now; std::chrono::duration diff end start; std::cout std::fixed std::setprecision diff.count std::endl; return board; return std::vector; Empty vector indicates failure void printBoardconst std::vector& board if boardempty std::cout std::endl; return; int n board.size; if n for int i ; i n; i for int j ; j n; j std::cout boardi j : ; std::cout std::endl; ; int main int n; std::cin n; NQueensSolver solver; std::vector solution solver.solven; For testing tool std::cout ; for sizet i ; i solution.size; i if i std::cout ; std::cout solutioni; std::cout std::endl; Print board visualization solver.printBoardsolution; return ; this algorithms is too slow. optimize it as max as possible using also minconflicts to work with N for less than one second
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
