问题描述:
把整数1~n填写到一个环中,要求每个整数只能填写一次,并且相邻两个数的和为素数。
素数是只能被1和自身整除的整数。
参考代码如下:
#include<stdio.h>
#include<math.h>
int n;
int arr[100];
int prime(int t){
int i;
for(i=2;i<sqrt(t);i++){
if(t%i==0)
return 0;
}
return 1;
}
void dfs(int t){
int i,temp;
if(t==n){
for(int i=0;i<n;i++){
printf("%d\t",arr[i]);
}
printf("\n");
return ;
}
for(int i=t;i<n;i++){
temp = arr[i];
arr[i] = arr[t];
arr[t] = temp;
if(t<n-1){
if(prime(arr[t]+arr[t-1]))
dfs(t+1);
}
else{
if(prime(arr[t]+arr[t-1])&&prime(arr[t]+arr[0]))
dfs(t+1);
}
temp = arr[i];
arr[i] = arr[t];
arr[t] = temp;
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
arr[i] = i+1;
}
dfs(1);
return 0;
}