zoj1457

来源:互联网 发布:24口网络配线架接线图 编辑:程序博客网 时间:2024/06/06 10:44

主要是个剪枝,相邻两个数必须是一奇一偶,所以如果是奇数个的话,根本不用考虑,否则会TLE的。

其他的思路很简单,但是实现起来。。。唉。

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>int A[20],visit[20],ok,n;int isp[40]={0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1};void dfs(int cur) {  int i;   if(cur==n && isp[A[0]+A[n-1]] && isp[A[n-1]+A[n-2]])  {     for(i=0; i<n; i++)     {       if(i==n-1)         printf("%d",A[i]);       else         printf("%d ",A[i]);      }     ok = 1;     printf("\n");  }   else  {    for(i=2; i<=n; i++)     {       if(!visit[i] && isp[i+A[cur-1]])       {        A[cur] = i;         visit[i] = 1;         dfs(cur+1);        visit[i] = 0;        A[cur] = 0;      }    }  }}int main(){   int i=1,j;  while(scanf("%d",&n)!=EOF)  {    if(n == 0)      break;    printf("Case %d:\n", i++);    memset(visit,0,sizeof(visit));     for(j=0; j<n; j++)    A[j] = j+1;    visit[1] =1;     if(n%2 == 0)    dfs(1);     printf("\n");  }  return 0;}
原创粉丝点击