zoukankan      html  css  js  c++  java
  • HDU1016 素数环---(dfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1016

    Sample Input
    6 8
     
    Sample Output
    Case 1:
    1 4 3 2 5 6
    1 6 5 2 3 4
    Case 2:
    1 2 3 8 5 6 7 4
    1 2 5 8 3 4 7 6
    1 4 7 6 5 8 3 2
    1 6 7 4 3 8 5 2
    题意:
    输入整数n (0 < n < 20).
    找出n个整数,能组成一个环,环中任意相邻两数之和为素数,字典序输出所有情况,每种情况1开头
    #include<stdio.h>
    #include<string.h>
    int prime[40]={0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0},n;//素数打表,因为n最大是20,所以只要打到40
    int visited[21],a[21];//visited[]标记数组,a[]存符合条件的序列  定包含1->n   只是需要输出特定顺序的n个数//
    void dfs(int num)//深搜
    {
       int i;
       if(num==n&&prime[a[num-1]+a[0]])  //满足条件了,就输出来   然后一步步返回
       {
           for(i=0;i<num-1;i++)
               printf("%d ",a[i]);
           printf("%d
    ",a[num-1]);
       }
       else                    //num  1->n-1
       {
           for(i=2;i<=n;i++)
           {
               if(visited[i]==0)//若未访问
               {
                   if(prime[i+a[num-1]]) //是否和相邻的加起来是素数
                   {
                       visited[i]=-1;//标记了
                       a[num++]=i;//放进数组
                       dfs(num); //递归调用
                       visited[i]=0; //退去标记
                       num--;   
                   }
               }
           }
       }
    }
    int main()
    {
          int num=0;
          while(scanf("%d",&n)!=EOF)
          {
             num++;
             printf("Case %d:
    ",num);
             memset(visited,0,sizeof(visited));//标记数组初始化为0
             a[0]=1;
             dfs(1);
             printf("
    ");
          }
          return 0;
    }
  • 相关阅读:
    Shodan新手入坑指南
    linux 下查看网卡工作速率
    centos关闭ipv6
    springBoot----@ConditionalOnxxx相关注解总结
    ElasticSearch Root身份运行
    CentOS6 Install kafka
    CentOS 7 中firewall-cmd命令
    sensu
    metrics+spring+influxdb
    SpringBoot(十二):SpringBoot整合Kafka
  • 原文地址:https://www.cnblogs.com/kimsimple/p/6534411.html
Copyright © 2011-2022 走看看