HDOJ 1016 Prime Ring Problem 简单搜索

DFS

//DFS
//真的不能随便用全局变量
#include"stdio.h"
#include"string.h"
int circle[20],p[40],vis[20];
int n,order=1;
void dfs(int c,int cnt)
{
         int i,j;
         if(cnt==n&&p[1+circle[n]])
         {
                for(j=1;j<n;j++)
                        printf("%d ",circle[j]);
                printf("%d\n",circle[j]);
                return;
         }
         for(i=2;i<=n;i++)
                 if(!vis[i]&&p[i+c])
                 {
                         vis[i]=1;
                         circle[cnt+1]=i;
                         dfs(i,cnt+1);
                         vis[i]=0;
                 }
}
main()
{
          int i,j;   
         memset(p,1,sizeof(p));
         for(i=2;i<20;i++)
                 for(j=2;i*j<40;j++)
                 p[i*j]=0;
         circle[1]=1;
         while(scanf("%d",&n)!=EOF)
         {
                  memset(vis,0,sizeof(vis));
                  vis[1]=1;
                  printf("Case %d:\n",order++);
                  dfs(1,1);
                  printf("\n");
         }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值