zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/qioalu/p/4898965.html
Copyright © 2011-2022 走看看