好久没有刷UVa了,没想到居然一次AC,代码几乎与rujia没有什么太大的区别
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[20],n,cnt;
bool isprime(int m)
{
for(int i=2;i<m;i++)
if(m%i==0) return 0;
return 1;
}
void fuc(int cur,bool used[20])
{
if(cur==n)
{
printf("%d",a[1]);
for(int i=2;i<=n;i++)
printf(" %d",a[i]);
printf("\n");
return;
}
for(int i=2;i<=n;i++)
{
if(!used[i]&&isprime(a[cur]+i))
{
if((cur==n-1&&isprime(1+i))||cur<n-1)
{
a[cur+1]=i;
used[i]=1;
fuc(cur+1,used);
used[i]=0;
}
}
}
}
int main()
{
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
if(++cnt>1) printf("\n");
printf("Case %d:\n",cnt);
bool used[20]={};
a[1]=1;
used[1]=1;
fuc(1,used);
}
}