ZOJ跑速度好快,本地都卡成狗了,到评测器上面940s就过了....
这题就是制造一个素数环,
DFS 的时候判断一下这个数与前一个数的和是否互质,输出前判断一下互质就好
↑_↑上面这种会T掉,搜索后输出答案发现,n为奇数的时候是无解的
加上判断940ms就A了...
#include<bits/stdc++.h>
using namespace std;
int n;
bool vis[23],f[50];
int ans[23];
void preGao()
{
memset(f,0,sizeof(f));
f[2]=f[3]=f[5]=f[7]=f[11]=f[13]=f[17]=f[19]=f[23]=f[29]=f[31]=f[37]=f[41]=true;
}
void dfs(int k)
{
if (k==n)
{
if (f[ans[k]+ans[1]])
{
for (int i=1;i<=n;i++)
printf(i==1?"%d":" %d",ans[i]);
cout<<endl;
}
return;
}
for (int i=2;i<=n;i++)
{
if (!vis[i] && f[i+ans[k]])
{
vis[i]=true;
ans[k+1]=i;
dfs(k+1);
vis[i]=false;
}
}
}
void Gao()
{
memset(vis,0,sizeof(vis));
ans[1]=1;
vis[1]=true;
dfs(1);
}
int main()
{
//freopen("a.in","r",stdin);
preGao();
int cas=1;
while (cin>>n)
{
printf("Case %d:\n",cas++);
if (n%2==0)
Gao();
cout<<endl;
}
return 0;
}