diff -r 9be6981ea598 NQueens/Makefile --- a/NQueens/Makefile Thu Jul 04 02:05:53 2013 +0900 +++ b/NQueens/Makefile Fri Mar 07 23:11:16 2014 +0900 @@ -1,7 +1,6 @@ CXX = g++ CPPFLAGS = -Wall -O2 -g -LDFLAGS = -lpthread RM = rm -f TARGETS = nqueens diff -r 9be6981ea598 NQueens/nqueens.cpp --- a/NQueens/nqueens.cpp Thu Jul 04 02:05:53 2013 +0900 +++ b/NQueens/nqueens.cpp Fri Mar 07 23:11:16 2014 +0900 @@ -4,7 +4,8 @@ #include #include "solver.h" -#include "thread.h" +#include +using namespace std; #include "timenow.h" #if defined(_WIN32) @@ -18,46 +19,32 @@ int safe_main(int argc, char *argv[]) { int n; - int parallel; long answer; int center, x, row, left, right; long long start, elapse; Solver **solvers; - Thread **solver_threads; Solver *solver_remain; - Thread *solver_remain_thread; if (argc < 2) { - cout << "usage: \n" - << "NQueens queens(1 ... 30) parallel(true or false)" - << endl; - return -1; + cout << "n" << endl; + cin >> n; } +else{ //get the arguments n = strtol(argv[1], NULL, 0); if (n < 0 || 30 < n) { n = 0; } +} cout << "queens : " << n << endl; - parallel = false; - if (argc >= 3) { - if (strcasecmp(argv[2], "true") == 0) { - parallel = 1; - } else { - parallel = 0; - } - } - cout << "parallel: " << parallel << endl; - //start start = TimeNow::microtime(); //solve center = n >> 1; solvers = new Solver *[center]; - solver_threads = new Thread *[center]; answer = 0; for (x = 0; x < center; x++) { @@ -67,16 +54,10 @@ right = row >> 1; solvers[x] = new Solver(row, left, right, n, 1, 0); - solver_threads[x] = new Thread(solvers[x]); - if (parallel) { - solver_threads[x]->start(); - } else { - solver_threads[x]->run(); - } + solvers[x]->run(); } solver_remain = NULL; - solver_remain_thread = NULL; if (n % 2 == 1) { //center(if N is odd) row = 1 << center; @@ -84,39 +65,25 @@ right = row >> 1; solver_remain = new Solver(row, left, right, n, 1, 0); - solver_remain_thread = new Thread(solver_remain); - if (parallel) { - solver_remain_thread->start(); - } else { - solver_remain_thread->run(); - } + solver_remain->run(); } //join for (x = 0; x < center; x++) { - if (parallel) { - solver_threads[x]->join(); - } answer += solvers[x]->get_new_answer(); } answer *= 2; if (solver_remain) { - if (parallel) { - solver_remain_thread->join(); - } answer += solver_remain->get_new_answer(); } //delete for (x = 0; x < center; x++) { delete solvers[x]; - delete solver_threads[x]; } delete[] solvers; - delete[] solver_threads; delete solver_remain; - delete solver_remain_thread; //finished elapse = TimeNow::microtime() - start;