博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM - 7.4 回溯法
阅读量:6191 次
发布时间:2019-06-21

本文共 2403 字,大约阅读时间需要 8 分钟。

生成和检查结合.

7.4.1 八皇后

利用数组C[cur]记录列数,行号。关键在于回溯 -- 如果不合适,那么回溯到上一层。break;

c#include 
using namespace std;int n, tot;const int maxn = 100;int C[maxn];void search(int cur){ int i, j; if(cur == n) tot++; else for(i = 0; i < n; i++) { int ok = 1; C[cur] = i; for(j = 0; j < cur; j++) { if(C[cur] == C[j] || cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]) { ok = 0; break; } } if(ok) search(cur+1); }}int main(int argc, const char *argv[]){ while(~scanf("%d", &n)) { tot = 0; search(0); printf("%d\n", tot); } return 0;}

7.4.2 素数环

cpp#include 
#include
const int maxn = 100;bool is_prime[maxn];int prime[maxn];int pn;int n;void init(){ int i, j; pn = 0; memset(is_prime, 1, sizeof(is_prime)); for(i = 2; i < maxn; i++) { if(is_prime[i]) prime[pn++] = i; for(j = 0; j < pn && i * prime[j] <= maxn; j++) { is_prime[i * prime[j]] = 0; if(i % prime[j] == 0) break; } }}int a[maxn];int vis[maxn];void dfs(int cur){ // 递归边界 if(cur == n && is_prime[a[0] + a[n-1]]) { for(int i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } else for(int i = 2; i <= n; i++) if(!vis[i] && is_prime[i + a[cur-1]]) { a[cur] = i; vis[i] = 1; dfs(cur+1); vis[i] = 0; }}int main(int argc, const char *argv[]){ init(); a[0] = 1; while(~scanf("%d", &n)) { dfs(1); } return 0;}

7.4.3 困难的串

每次从后面寻找串即可, 前面的串已经是没有重复的了。

c#include 
#include
using namespace std;int n, l;const int maxn = 100;int tot;int a[maxn];int dfs(int cur){ // 递归一次即找到一个解 if(tot++ == n) { for(int i = 0; i < cur; i++) printf("%c", a[i] + 'A'); printf("\n"); return 0; } for(int i = 0; i < l; i++) { a[cur] = i; int ok = 1; for(int j = 1; j*2 <= cur+1; j++) { int equal = 1; for(int k = 0; k < j; k++) if(a[cur-k] != a[cur-k-j]) { equal = 0; break; } if(equal) { ok = 0; break;} } if(ok && !dfs(cur+1)) return 0; } return 1;}int main(int argc, const char *argv[]){ while(~scanf("%d%d", &n, &l)) { dfs(0); } return 0;}

转载地址:http://igrda.baihongyu.com/

你可能感兴趣的文章
lesson6 -SSH FTP
查看>>
工作上的重要数据被误删除了怎么办?
查看>>
题小七春游照
查看>>
课下参考三 使用光盘映像创建虚拟机并安装centos5.5系统视频
查看>>
通过xrdp协议远程连接 ubuntu虚拟机
查看>>
Linux网络安全技术与实现(第2版)第二章笔记(反向代理)
查看>>
linux运维之路第一篇章:决心书
查看>>
el-upload 上传文件和上传图片的基本用法
查看>>
esxi开启命令行模式以及命令开启虚拟机
查看>>
自动化运维Python系列之Memcache、Redis操作
查看>>
linux 安装sysstat使用iostat、mpstat、sar、sa
查看>>
我的友情链接
查看>>
在CDH5.14.4 中安装StreamSets与案例运行
查看>>
Gym 101147G 第二类斯特林数
查看>>
吾爱破解工具箱 v 1.0
查看>>
openssl命令行验证到期时间和域名正确性
查看>>
RedHat 7 修改系统启动级别并安装GHONE桌面环境
查看>>
我的友情链接
查看>>
脚本小练——用户认证
查看>>
mysql安装
查看>>