• HDU1016


    题意:1-n围成一个圈,要使相邻的两个数之和为素数;

    DFS 

    第二道没看题解自己搜出来的题,好有成就感!!(虽然比较水吧= =

    上代码咯~

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <math.h>
     4 #include <iostream>
     5 #include <algorithm>
     6 using namespace std;
     7 const int dx[4]= {1,0,-1,0};
     8 const int dy[4]= {0,1,0,-1};
     9 int vis[105],prime[40],n,k1,s[10110],cas;
    10 int dfs(int x,int cnt)
    11 {
    12     if(cnt==n&&prime[x+1])//满足条件时,输出。
    13     {
    14         printf("1 ");
    15         for(int i=0; i<k1; i++)
    16         {
    17             printf("%d",s[i]);
    18             if(i!=k1-1)
    19             {
    20                 printf(" ");
    21             }
    22             else
    23             {
    24                 printf("
    ");
    25             }
    26         }
    27         x=1;//进行下面的搜索的初始化。
    28         cnt=1;
    29     }
    30     else
    31     {
    32         for(int i=2; i<=n; i++)
    33         {
    34             if(!vis[i]&&prime[x+i])
    35             {
    36                 vis[i]=1;
    37                 s[k1++]=i;
    38                 dfs(i,cnt+1);
    39                 vis[i]=0;//如果搜不到就让标记消失~
    40                 k1--;
    41             }
    42         }
    43     }
    44     return 0;
    45 }
    46 int main()
    47 {
    48     memset(prime,0,sizeof(prime));//打一个素数表
    49     for(int i=2; i<=40; i++)
    50     {
    51         int k=sqrt(i);
    52         int f=0;
    53         for(int j=2; j<=k; j++)
    54         {
    55             if(i%j==0)
    56             {
    57                 prime[i]=0;
    58                 f=1;
    59                 break;
    60             }
    61         }
    62         if(f==0)
    63         {
    64             prime[i]=1;
    65         }
    66     }
    67     cas=0;
    68     while(~scanf("%d",&n))
    69     {
    70         cas++;
    71         k1=0;
    72         memset(vis,0,sizeof(vis));//每次都要初始化
    73         printf("Case %d:
    ",cas);
    74         dfs(1,1);//从一开始搜
    75         printf("
    ");
    76     }
    77     return 0;
    78 }
    View Code
  • 相关阅读:
    无题
    【HNOI 2002 】营业额统计
    P1589
    【网络流24题】最长递增子序列
    【NOI2008】志愿者招募
    【NOI2015】软件包管理器
    P1347
    【BZOJ 3262三维偏序】陌上花开
    数论六·模线性方程组
    数论五·欧拉函数
  • 原文地址:https://www.cnblogs.com/qioalu/p/4898965.html
Copyright © 2020-2023  润新知