您的位置:首页 > 其它

【DFS】nyoj 488 素数环

2013-05-29 21:27 337 查看
http://acm.nyist.net/JudgeOnline/problem.php?pid=488

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int a[50],save[25],vis[25];
int n,flag;

void DFS(int x,int num)
{
int i;
if(x==n&&!a[1+num])  //n-1个数
{
for(i=0;i<n-1;i++)
cout<<save[i]<<' ';
cout<<save[i]<<endl;
}
for(i=2;i<=n;i++)
{
if(!vis[i]&&!a[num+i])
{
vis[i]=1;
save[x]=i;
DFS(x+1,i);
vis[i]=0;//回溯
}
}
}

int main()
{
int i,j,k;
memset(a,0,sizeof(a));
for(i=2;i<10;i++)
{
if(!a[i])
for(j=2*i;j<50;j+=i)
a[j]=1;
}
k=1;
while(cin>>n&&n)
{
cout<<"Case "<<k++<<":"<<endl;

if(n==1)//1自成环
{cout<<1<<endl;continue;}

if(n%2!=0)//奇数不可能成环
{cout<<"No Answer"<<endl;continue;}

memset(vis,0,sizeof(vis));
save[0]=vis[1]=1;
DFS(1,1);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: