Visitors hit counter dreamweaver

HDOJ 1016 Prime Number

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.

#include <iostream>
int ring[20],vis[20];
using namespace std;
bool isPrimeNumber(int i){
switch(i){
case 2 :
case 3 :
case 5 :
case 7 :
case 11:
case 13:
case 17:
case 19:
case 23:
case 29:
case 31:
case 37:
case 39:return true;
default:
return false;
}
}
void primeRing(int n,int i){
if(i==n && isPrimeNumber(ring[0]+ring[n-1])){
for(int j=0;j<n-1;j++)
cout<<ring[j]<<'';
cout<<ring[j]<<endl;
}
else{
for(int j=2;j<=n;j++){ //create 1--n number
if(!vis[j] && isPrimeNumber(ring[i-1]+j)){
ring[i]=j;
vis[j]=true;
primeRing(n,i+1);
vis[j]=false;
}
}//for
}//else
}//primeRing
int main()
{
memset(vis,false,sizeof(vis));
memset(ring,0,sizeof(ring));
int n,icase=0;
ring[0]=1;
vis[0]=true; //Initialize
// freopen("acm.txt","r",stdin);
while(cin>>n && n>0 && n<20){
icase++;
cout<<"Case "<<icase<<":"<<endl;
primeRing(n,1);
cout<<endl;
}
return 0;
}

熟悉DFS

posted @ 2011-11-19 22:29  Jason Damon  阅读(206)  评论(0)    收藏  举报