## 编译
Windows-MSVC:
```
nmake msvc
```
Windows-MinGW:
```
mingw32-make gnu
```
Linux:
```
make gnu
```
## 运行
```
nonogram_solver INPUTFILE -v PRINTSTEPS # INPUTFILE:输入文件,PRINTSTEPS:每隔多少步打印一次中间状态
nonogram_solver INPUTFILE # 不打印中间状态
nonogram_solver INPUTFILE -v # 相当于:nonogram_solver INPUTFILE -v 10
nonogram_solver # 相当于:nonogram_solver input.txt
```
## 代码简介
```
solve
├ first_valid_row // 根据行约束,生成一行的初始解
├ next_valid_row // 根据行约束,给定一行的一个解,生成该行下一个解
├ prepare_column_check // 构造用于is_valid_columns的辅助数据结构
└ is_valid_columns // 检查 0~i 行是否符合列约束
├ column_initial_check // 检查 0 行是否符合列约束
└ column_update_check // 当 i>0 时检查 0~i 行是否符合列约束
```
行初始解的生成方式:把所有的段都挤到最左边。例:
```
n = 15
row_constrain = [1, 2, 3]
| | └--------┐
| └--┐ |
v v v
initial_solution = [1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
```
行下一个解的生成方式:从右往左找第一个能右移的段S,将S右移一格,并将S右边的所有段挤到紧挨着S
```
S
|
v
previous_solution = [0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1]
next_solution = [0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0]
```
检查一列`[0,i]`号元素的方式:
1. 遍历`[0,i]`,检查已经出现的完整段是否匹配列约束的前几段;
2. 如果`i`号元素是黑色,则当前处在下一个段的开头部分,检查连续的黑色元素个数是否超过了该段长度;
3. 估计剩下的段至少要占据多大的空间,检查是否不超过`m-i-1`格。
`column_update_check`:当`i>0`时,由于在回溯过程中是逐行计算的,在检查`[0,i]`时,必然之前已经检查过`[0,i-1]`符合列约束。那么不需要遍历`[0,i]`,只需要记住前面检查时的状态,在此时进行从`(i-1)`到`i`的更新即可。
## 测试数据来源
[数织-在线解谜游戏](https://cn.puzzle-nonograms.com)
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++使用回溯法求解数织问题.zip
共14个文件
txt:4个
cpp:2个
h:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 120 浏览量
2022-12-31
12:41:14
上传
评论
收藏 10KB ZIP 举报
温馨提示
基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数织问题.zip 基于C++使用回溯法求解数
资源推荐
资源详情
资源评论
收起资源包目录
C++使用回溯法求解数织问题.zip (14个子文件)
nonogram-solver-master
Makefile.gnu 193B
Makefile 131B
LICENSE 1KB
readme.md 2KB
main.cpp 1KB
nonogram.h 4KB
Makefile.msvc 191B
test_data
input-30.txt 523B
input-15.txt 191B
input-50.txt 1KB
input-25.txt 388B
nonogram.cpp 10KB
timer.h 610B
.gitignore 279B
共 14 条
- 1
资源评论
程序员张小妍
- 粉丝: 1w+
- 资源: 3252
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功