您的位置:首页 > 其它

ZOJ 1457 Prime Ring Problem(DFS)

2010-08-07 23:18 399 查看
数据很小,本来以为能轻松过,但是把数据输入后长时间不出结果,想必然超时。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
+1] )
{
for(k = 1;k<n;k++)
printf("%d ",a[k]);
printf("%d/n",a
);
}
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: