C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Functions
exprtk_nqueens_problem.cpp File Reference
#include <string>
#include "exprtk.hpp"
Include dependency graph for exprtk_nqueens_problem.cpp:

Go to the source code of this file.

Functions

template<typename T >
void sudoku_solver ()
 
int main ()
 

Function Documentation

◆ main()

int main ( )

Definition at line 130 of file exprtk_nqueens_problem.cpp.

131{
132 sudoku_solver<double>();
133 return 0;
134}

◆ sudoku_solver()

template<typename T >
void sudoku_solver ( )

Definition at line 26 of file exprtk_nqueens_problem.cpp.

27{
28 typedef exprtk::symbol_table<T> symbol_table_t;
29 typedef exprtk::expression<T> expression_t;
30 typedef exprtk::parser<T> parser_t;
31 typedef exprtk::function_compositor<T> compositor_t;
32 typedef typename compositor_t::function function_t;
33
34 const T n = T(15);
35 std::vector<T> board(static_cast<std::size_t>(n), T(- 1));
36
38
39 symbol_table_t symbol_table;
40 symbol_table.add_constant("n" , n );
41 symbol_table.add_vector ("board" , board);
42 symbol_table.add_package (io_package);
43
44 compositor_t compositor(symbol_table);
45
46 compositor.load_variables(true);
47 compositor.load_vectors (true);
48
49 compositor.add(
50 function_t("display_board")
51 .expression
52 (
53 " for (var row := 0; row < n; row += 1) "
54 " { "
55 " for (var col := 0; col < n; col += 1) "
56 " { "
57 " print((board[row] == col) ? ' Q ' : ' . '); "
58 " }; "
59 " "
60 " println(''); "
61 " } "
62 ));
63
64 compositor.add(
65 function_t("is_valid")
66 .vars("row", "col")
67 .expression
68 (
69 " for (var i := 0; i < row; i += 1) "
70 " { "
71 " if ( "
72 " (board[i] == col) or "
73 " (abs(board[i] - col) == abs(i - row)) "
74 " ) "
75 " { "
76 " return [false]; "
77 " } "
78 " }; "
79 " "
80 " return [true]; "
81 ));
82
83 compositor.add(
84 function_t("solve_nqueens")
85 .var("row")
86 .expression
87 (
88 " if (row == n) "
89 " { "
90 " return [true]; "
91 " }; "
92 " "
93 " for (var col := 0; col < n; col += 1) "
94 " { "
95 " if (is_valid(row, col)) "
96 " { "
97 " board[row] := col; "
98 " "
99 " if (solve_nqueens(row + 1)) "
100 " { "
101 " return [true]; "
102 " } "
103 " } "
104 " }; "
105 " "
106 " return [false]; "
107 ));
108
109 const std::string sudoku_solver_program =
110 " if (solve_nqueens(0)) "
111 " { "
112 " println('N-Queens Puzzle Solved!'); "
113 " } "
114 " else "
115 " { "
116 " println('Error: Failed to solve n-queens puzzle.'); "
117 " }; "
118 " "
119 " display_board(); ";
120
121 expression_t expression;
122 expression.register_symbol_table(symbol_table);
123
124 parser_t parser;
125 parser.compile(sudoku_solver_program,expression);
126
127 expression.value();
128}