素数环问题(分支限界法)

来源:互联网 发布:优道网络骗局揭秘 编辑:程序博客网 时间:2024/05/21 12:36

问题描述:

       把整数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;}


原创粉丝点击