hdu1016 Prime Ring Problem(回溯)
2012-04-29 00:39
309 查看
Prime Ring Problem
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12105 Accepted Submission(s): 5497
[align=left]Problem Description[/align]
A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime.
Note: the number of first circle should always be 1.
View Code
#include<iostream> #define N 25 #define M 40 using namespace std; bool is_prime[M],visited ; int n,test,ans ; void work(int k) { int i; if(k==n+1) { if(!is_prime[ans +ans[1]]) return ; for(i=1;i<=n-1;i++) cout<<ans[i]<<" "; cout<<ans[i]<<endl; return ; } for(i=2;i<=n;i++) { if(!visited[i]&&is_prime[ans[k-1]+i]) { visited[i]=true; ans[k]=i; work(k+1); visited[i]=false; } } } bool prime(int n) { if(n==1) return false; if(n==2||n==3) return true; int i; for(i=2;i<n;i++) if(n%i==0) return false; return true; } int main() { int i;test=1; for(i=1;i<M;i++) is_prime[i]=prime(i); while(cin>>n) { ans[1]=1; memset(visited,false,sizeof(visited)); cout<<"Case "<<test<<":"<<endl; work(2); test++; cout<<endl; } return 0; }
相关文章推荐
- hdu1016 Prime Ring Problem(回溯dfs)
- HDU1016 Prime Ring Problem (回溯 + 剪枝)
- HDU1016 Prime Ring Problem 【回溯】
- hdu1016_Prime_Ring_Problem(经典dfs)
- UVa 524 Prime Ring Problem(DFS , 回溯)
- HDU1016-Prime Ring Problem(DFS)
- 递归与回溯 HDOJ 2553 N皇后问题 1016 Prime Ring Problem
- HDU1016 Prime Ring Problem (DFS)
- Prime Ring Problem---hdu1016(dfs)
- HDU 1016 Prime Ring Problem(简单回溯)
- UVA - 524 Prime Ring Problem (经典回溯问题)
- HDU1016:Prime Ring Problem
- hdu1016-Prime Ring Problem(回溯法)
- UVa 524 - Prime Ring Problem(回溯)
- hdu1016 Prime Ring Problem 素数环
- HDU-#1016 Prime Ring Problem(DFS+回溯)
- hdoj--1016--Prime Ring Problem(递归回溯)
- hdoj1016 Prime Ring Problem (入门回溯) 题解
- UVa 524 Prime Ring Problem (回溯)
- hdu(hdu1016)Prime Ring Problem