回溯路径的记录
2012-03-28 15:59
316 查看
HDU 1016 http://acm.hdu.edu.cn/showproblem.php?pid=1016
题目大意:给定一个数N,从1到N的这些整数构成一个环,它的目的就是让
你找出第相邻两个数都是素数的环。而且是所有的环。
View Code
题目大意:给定一个数N,从1到N的这些整数构成一个环,它的目的就是让
你找出第相邻两个数都是素数的环。而且是所有的环。
View Code
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; int N; bool vis[21]; int pre[21]; bool prime[45]; bool Flag[45]; void GetPrime() { int i, j; for(i=2; i<=40; i++) { if(!Flag[i]) //没有被标记就是素数 { prime[i] = true; for(j=i*i; j<=40; j=j+i) Flag[j] = true; //标记不是素数的数 } } } void DFS(int step){ int i; if(step==N){ if(prime[pre[step-1]+1]){ cout<<"1"; for(i=1; i<N; i++) cout<<" "<<pre[i]; cout<<endl; } return; }else{ for(i=2; i<=N; i++){ if(vis[i]==false && prime[pre[step-1]+i]){ vis[i] = true; pre[step] = i; //记录路径 DFS(step+1); vis[i] = false; //回溯就是这么一句话 } } } } int main() { int CaseN=1; GetPrime(); //打出素数表 while(cin>>N) { cout<<"Case "<<CaseN++<<":"<<endl; vis[1]=true; pre[0] = 1; DFS(1); cout<<endl; } }
相关文章推荐
- 八数码第五境界——双向BFS+康托展开判重+回溯记录路径
- Pots(bfs+路径记录与回溯)
- 【PAT1018】 Public Bike Management 单源最短路径&路径记录回溯
- HDOJ 5092 Seam Carving(动态规划,回溯,记录路径)
- 八数码第七境界——A*之曼哈顿+康托展开判重+回溯记录路径+逆序数判无解
- sdut oj 3058 路线冲突问题(BFS+记录路径算法,回溯路径 )
- 八数码第四境界——暴力反向BFS+康托展开判重+打表+回溯记录路径
- poj1416 Shredding Company dfs 记录路径
- 利用Dijkstra算法实现记录每个结点的所有最短路径
- POJ 3414--Pots(BFS+回溯路径)
- POJ--1141--Brackets Sequence--记录DP路径
- Floyd算法(不记录路径)
- Vijos 1071 【DP之记录路径】
- poj1141 Brackets Sequence(区间dp记录路径问题)
- hdu1224 dp(dp + 栈/父亲数组记录路径)
- hdu1160 FatMouse's Speed (dp,记录路径)
- HDU1503(LCS,记录路径)
- PAT L3-001. 凑零钱((背包&路径记录)
- [SWUSTOJ1737] 太空飞行计划问题(最大权闭合子图,记录路径)
- codeforces #436 - E. Fire (记录路径dp)