From 450934d0f385cdb01d1157cab32a53d26a5d0544 Mon Sep 17 00:00:00 2001 From: zkEloHub <13278880070@163.com> Date: Sat, 14 Mar 2020 21:06:02 +0800 Subject: [PATCH 1/2] test for update --- Lab1/src/Sudoku/main.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/Lab1/src/Sudoku/main.cc b/Lab1/src/Sudoku/main.cc index 4ed2f3a5..aa0730e2 100644 --- a/Lab1/src/Sudoku/main.cc +++ b/Lab1/src/Sudoku/main.cc @@ -55,3 +55,4 @@ int main(int argc, char* argv[]) return 0; } +// This is a test \ No newline at end of file From 8e51f17bd519a781f55b819019ddf560b55a9bc9 Mon Sep 17 00:00:00 2001 From: zkEloHub <13278880070@163.com> Date: Sun, 15 Mar 2020 19:14:46 +0800 Subject: [PATCH 2/2] update --- Lab1/README.md | 2 +- Lab1/src/Sudoku/Makefile | 4 +-- Lab1/src/Sudoku/Makefile0 | 7 +++++ Lab1/src/Sudoku/sudoku | Bin 0 -> 23424 bytes Lab1/src/Sudoku/sudoku_solve | Bin 0 -> 23432 bytes Lab1/src/Sudoku/sudoku_solve.cc | 52 ++++++++++++++++++++++++++++++++ 6 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 Lab1/src/Sudoku/Makefile0 create mode 100644 Lab1/src/Sudoku/sudoku create mode 100644 Lab1/src/Sudoku/sudoku_solve create mode 100644 Lab1/src/Sudoku/sudoku_solve.cc diff --git a/Lab1/README.md b/Lab1/README.md index 8a0e781f..1c754ff4 100644 --- a/Lab1/README.md +++ b/Lab1/README.md @@ -122,7 +122,7 @@ Your program should be able to: 2. Successfully solve the puzzles in the input file, and output the results in the format described before. 3. Use multiple threads/processes to make use of most of your machine's CPU cores. -\[Tips\]: 1) Use event queue to dispatch tasks and merge results to/from worker threads. 2) Dynamically detect how many CPU cores are there on your machine, in order to decide how many threads/processes your program uses. 3) Be careful about the contention among multiple threads/processes +\[Tips\]: 1) Use event **queue** to dispatch tasks and merge results to/from worker threads. 2) Dynamically detect how many CPU cores are there on your machine, in order to decide how many threads/processes your program uses. 3) Be careful about the contention among multiple threads/processes ##### 3.1.3.2 Advanced version diff --git a/Lab1/src/Sudoku/Makefile b/Lab1/src/Sudoku/Makefile index c5e2a079..5b6aef98 100644 --- a/Lab1/src/Sudoku/Makefile +++ b/Lab1/src/Sudoku/Makefile @@ -1,7 +1,7 @@ CXXFLAGS+=-O2 -ggdb -DDEBUG CXXFLAGS+=-Wall -Wextra -all: sudoku +all: sudoku_solve -sudoku: main.cc neighbor.cc sudoku_basic.cc sudoku_min_arity.cc sudoku_min_arity_cache.cc sudoku_dancing_links.cc +sudoku_solve: sudoku_solve.cc neighbor.cc sudoku_basic.cc sudoku_min_arity.cc sudoku_min_arity_cache.cc sudoku_dancing_links.cc g++ -O2 -o $@ $^ diff --git a/Lab1/src/Sudoku/Makefile0 b/Lab1/src/Sudoku/Makefile0 new file mode 100644 index 00000000..c5e2a079 --- /dev/null +++ b/Lab1/src/Sudoku/Makefile0 @@ -0,0 +1,7 @@ +CXXFLAGS+=-O2 -ggdb -DDEBUG +CXXFLAGS+=-Wall -Wextra + +all: sudoku + +sudoku: main.cc neighbor.cc sudoku_basic.cc sudoku_min_arity.cc sudoku_min_arity_cache.cc sudoku_dancing_links.cc + g++ -O2 -o $@ $^ diff --git a/Lab1/src/Sudoku/sudoku b/Lab1/src/Sudoku/sudoku new file mode 100644 index 0000000000000000000000000000000000000000..5fb59225dd5591846cd7bee41940baaaf0af8932 GIT binary patch literal 23424 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 E6C#=hLI3~& literal 0 HcmV?d00001 diff --git a/Lab1/src/Sudoku/sudoku_solve b/Lab1/src/Sudoku/sudoku_solve new file mode 100644 index 0000000000000000000000000000000000000000..968190866cf44531b6f2ab6f6afbd790537b9df5 GIT binary patch literal 23432 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 literal 0 HcmV?d00001 diff --git a/Lab1/src/Sudoku/sudoku_solve.cc b/Lab1/src/Sudoku/sudoku_solve.cc new file mode 100644 index 00000000..53fafcbf --- /dev/null +++ b/Lab1/src/Sudoku/sudoku_solve.cc @@ -0,0 +1,52 @@ +#include +#include +#include +#include +#include + +#include "sudoku.h" + +int64_t now() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000000 + tv.tv_usec; +} + +int main(int argc, char const *argv[]) +{ + init_neighbors(); + + FILE* fp = fopen(argv[1], "r"); + char puzzle[128]; + int total_solved = 0; + int total = 0; + bool (*solve)(int) = solve_sudoku_basic; + + solve = solve_sudoku_min_arity; + // solve = solve_sudoku_min_arity_cache; + // solve = solve_sudoku_dancing_links; + + int64_t start = now(); + // 一直读取, 读到 puzzle 中 + while (fgets(puzzle, sizeof puzzle, fp) != NULL) { + if (strlen(puzzle) >= N) { + ++total; + input(puzzle); + init_cache(); + + if (solve(0)) { + ++total_solved; + if (!solved()) assert(0); + } + else { + printf("No: %s", puzzle); + } + } + } + int64_t end = now(); + double sec = (end - start)/1000000.0; + printf("%f sec %f ms each %d\n", sec, 1000*sec/total, total_solved); + + return 0; +} \ No newline at end of file