HDU 1016 Prime Ring Problem
2013-07-14 14:04
405 查看
题目链接:Prime Ring Problem
解题思路:这道题目刚看见的时候感觉DFS肯定会超时,但是数据很水,最后还是AC了。
DFS一般都是递归实现,根据状态的不同,某些变量的数值也不同,应把他们放在函数参数中去,函数中
主要写 1.什么时候退出 2.搜索到这一状态的答案,再搜索下一状态 3.当搜索到全部答案时退出
解题思路:这道题目刚看见的时候感觉DFS肯定会超时,但是数据很水,最后还是AC了。
DFS一般都是递归实现,根据状态的不同,某些变量的数值也不同,应把他们放在函数参数中去,函数中
主要写 1.什么时候退出 2.搜索到这一状态的答案,再搜索下一状态 3.当搜索到全部答案时退出
#include<stdio.h> #include<string.h> #include<math.h> int v[25], ans[25], n; int isprime(int x){ int i; for(i = 2; i <= (int)sqrt(x); i++){ if(x % i == 0){ return 0; } } return 1; } void print(){ int i; for(i = 1; i <= n; i++){ if(i != 1){ printf(" "); } printf("%d", ans[i]); } printf("\n"); } void DFS(int depth){ int i, j, k; if(depth > n){ return; } for(i = 2; i <= n; i++){ if(isprime(i + ans[depth - 1]) && !v[i]){ ans[depth] = i; v[i] = 1; if(depth == n && isprime(1 + i)){ print(); } else{ DFS(depth + 1); } v[i] = 0; } } } int main(){ int i, j, k, tot = 1; while(scanf("%d", &n) != EOF){ printf("Case %d:\n", tot++); if(n == 1){ printf("1\n1\n"); continue; } memset(v, 0, sizeof(v)); memset(ans, 0, sizeof(ans)); ans[1] = 1; DFS(2); printf("\n"); } return 0; }
相关文章推荐
- HDU 1016(Prime Ring Problem)DFS
- hdu 1016 Prime Ring Problem(深度优先搜索)
- HDU 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem (dfs)
- 九度 Prime Ring Problem hdu 1016
- hdu 1016 Prime Ring Problem(水题)
- HDU 1016 Prime Ring Problem(DFS回溯+素数判断)
- HDU 1016 Prime Ring Problem
- Prime Ring Problem HDU - 1016 (深搜)
- Hdu 1016 Prime Ring Problem (素数环经典dfs)
- hdu 1016 Prime Ring Problem(素数环)
- HDU 1016 - Prime Ring Problem
- HDU 1016 Prime Ring Problem(DFS)
- HDU 1016 Prime Ring Problem (DFS回溯)
- HDU 1016 Prime Ring Problem【DFS】
- hdu 1016 Prime Ring Problem
- hdu 1016 Prime Ring Problem(DFS)
- hdu 1016 Prime Ring Problem(dfs)
- hdu 1016 Prime Ring Problem (dfs)
- hdu 1016 Prime Ring Problem (dfs)