您的位置:首页 > 其它

HDU 1016 超简单DFS

2014-08-18 10:49 337 查看
因为是很简单很简单的DFS。。。我就直接贴代码了

#include<iostream>
using namespace std;
#include<stdio.h>
int n;
int pri[44]={0},vis[22]={0},num[22]={0};
void dfs(int root,int x)
{
int i;
if(x==n)
{

for(i=0;i<n-1;i++)
printf("%d ",num[i]);
printf("%d\n",num[i]);
}
else if(x==n-1)
{

for(i=2;i<=n;i++)
{
if(vis[i]==0&&pri[root+i]==1&&pri[i+1]==1)
{
num[x]=i;
vis[i]=1;
dfs(i,x+1);
vis[i]=0;
}
}
}
else
{
for(i=2;i<=n;i++)
{
if(pri[root+i]==1&&vis[i]==0)
{
num[x]=i;
vis[i]=1;
dfs(i,x+1);
vis[i]=0;
}
}
}

}
int main()
{
int i,j,T=0;
pri[2]=pri[3]=pri[5]=pri[7]=pri[11]=pri[13]=pri[17]=pri[19]=pri[23]=pri[29]=pri[31]=pri[37]=1;
num[0]=1;
while(cin>>n)
{
T++;
memset(vis,0,sizeof(vis));
vis[0]=vis[1]=1;
printf("Case %d:\n",T);
dfs(1,1);
printf("\n");
}

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