hdu1016 Prime Ring Problem(回溯dfs)
来源:互联网 发布:hse培训矩阵 编辑:程序博客网 时间:2024/05/29 08:15
本题是回溯,遍历过程就好像一棵树,需要点想象力哈~,一旦树到了尾部即输出,而且输出后并不清空,回溯后继续寻找其他解并输出。
注意本题说的是相邻数的和是素数,并不是每个数都是素数。
还有网上发现个效率特高的素数打表法,分享下咯!
#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;const int N = 30;const int INF = 1000000;int vis[N], a[N], prime[50];int n;void prime_table()//高速打表{ memset(prime, 1, sizeof(prime)); for(int i = 2; i < 50; i ++) if(prime[i]) { for(int j = i + i; j < 50; j += i) prime[j] = 0; }}void dfs(int x, int cnt){ vis[x] = 1; if(cnt == n && prime[a[0] + a[cnt - 1]]) { printf("%d", a[0]); for(int i = 1; i < n; i ++) printf(" %d", a[i]); printf("\n"); } for(int i = 1; i <= n; i ++) { if(!vis[i] && prime[a[cnt - 1] + i]) { a[cnt] = i; dfs(i, cnt + 1); vis[i] = 0; } }}int main(){ // freopen("in.txt", "r", stdin); int Case = 1; prime_table(); while(~scanf("%d", &n)) { printf("Case %d:\n", Case ++); memset(vis, 0, sizeof(vis)); memset(a, 0, sizeof(a)); a[0] = 1; dfs(1, 1); printf("\n"); }}
0 0
- hdu1016 Prime Ring Problem(回溯dfs)
- hdu1016-Prime Ring Problem(回溯法)
- HDU1016 Prime Ring Problem 【回溯】
- HDU1016-Prime Ring Problem(DFS)
- hdu1016(Prime Ring Problem)- dfs+枚举
- hdu1016 Prime Ring Problem(dfs)
- hdu1016 Prime Ring Problem(dfs)
- hdu1016 Prime Ring Problem(dfs)
- HDU1016 Prime Ring Problem (DFS)
- HDU1016 Prime Ring Problem(dfs)
- HDU1016:Prime Ring Problem(dfs)
- HDU1016:Prime Ring Problem(DFS)
- hdu1016 Prime Ring Problem(DFS)
- Hdu1016 Prime Ring Problem(DFS)
- HDU1016:Prime Ring Problem(DFS)
- HDU1016:Prime Ring Problem(DFS)
- hdu1016(Prime Ring Problem)
- hdu1016 Prime Ring Problem()
- Android刮刮卡原理及实现
- vc小记。
- 关于ToonShader on iOS
- FreeSwitch:三、编译CSipSimple
- C实现头插法和尾插法来构建单链表(带头结点)
- hdu1016 Prime Ring Problem(回溯dfs)
- 明白回调和委托
- iOS 高效添加圆角效果 性能优化 实战讲解
- 如何正确停止一个线程
- 位域及对齐
- 将要读的书,真的一定要读书,纸质的书本
- 安卓adb是什么?ADB命令大全及使用教程
- 高等数学:第二章 导数与微分(3)函数微分 近似计算
- PIC定时器中断