Prime Ring Problem
题目大意
素环问题。给定1~n的整数,要求组成环并且相邻数字和为素数。以1为起点,给出可能情况?
解题思路
以1为起点,进行深度优先搜索,并有回溯处理!
More info: 杭电1016
#include <iostream>
#include <string.h>
#include <stdio.h>
#define N 21
using namespace std;
int n,Case;
int path[N];
int visited[N];
int count;
bool IsPrime(int x){
int i;
for(i=2; i*i<=x; i++)
if(x%i==0)
return false;
return true;
}
void DFS(int x,int count){//count表示搜索层数
int i;
for(i=2;i<=n;i++){
if(visited[i]==0&&IsPrime(x+i)){
visited[i]=1;
path[count]=i;
DFS(i,count+1);
visited[i]=0;
}
}
if(count==n){
if(IsPrime(x+1)){
int j=0;
while(j<n-1){
cout<<path[j]<<" ";
j++;
}
cout<<path[j]<<endl;//注意每行末尾不能有空格!
}
}
}
int main(int argc, char *argv[]) {
Case=1;
while(cin>>n){
memset(path,0,sizeof(path));
memset(visited,0,sizeof(visited));
count=1;
visited[1]=1;
path[0]=1;
cout<<"Case "<<Case++<<":"<<endl;
DFS(1,1);
cout<<endl;
}
return 0;
}