ZOJ 1457 Prime Ring Problem(DFS)

数据很小,本来以为能轻松过,但是把数据输入后长时间不出结果,想必然超时。10s啊。。。

 

然后从网上得知奇数的时候不能出来正常结果,所以时间省了很多,然后又发现看错题了,数据是小于20的,也就是在2到18之间,悲剧,提交之后AC。

 

dfs函数竟然一下子写成功了,罕见。。。。

 

 

#include<stdio.h> #include<stdio.h> #include<string.h> #include<math.h> int n,k,i,j; int start = 1; int used[21]; int a[21]; int prime[40]; int isprime(int i) { int k = sqrt(i); int j; for(j = 2;j<=k;j++) if(i%j == 0) return 0; return 1; } void init(void) { int i; for(i=3;i<=39;i++) if(isprime(i)) prime[i] = 1; else prime[0] = 0; } void dfs(int i) { int j; if(i > n && prime[a[n]+1] ) { for(k = 1;k<n;k++) printf("%d ",a[k]); printf("%d/n",a[n]); } for((a[i-1]%2==0)?(j=3):(j=2); j <= n; j+=2 ) { if(used[j]) continue; if(prime[j+a[i-1]]) { a[i] = j; used[j] = 1; dfs(i+1); } } used[a[i-1]] = 0; } int main(void) { init(); while( scanf("%d",&n) != EOF ) { printf("Case %d:/n",start++); memset(used,0,sizeof(used)); a[1] = 1; if(n%2==0) dfs(2); printf("/n"); } return 0; }

你可能感兴趣的:(ZOJ 1457 Prime Ring Problem(DFS))