• 简单的深度搜索素环问题


    杭电地址:http://acm.hdu.edu.cn/showproblem.php?pid=1016

    Prime Ring Problem

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13751    Accepted Submission(s): 6276

    Problem Description
    A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime.
    Note: the number of first circle should always be 1.
     
    Input
    n (0 < n < 20).
     
    Output
    The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions in lexicographical order.
    You are to write a program that completes above process.
    Print a blank line after each case.
     
    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
     
    Source
     
    Recommend
    JGShining
     
     
    #include <stdio.h>
    #include <string.h>
    
    int prime[40]={0,0,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};    
    int Circle[20];
    bool Visit[20],flag;
    int n,t=1;
    
    void Dfs(int x,int y)
    {
        int i;
      if(y==n+1&&prime[Circle[1]+x]==1)
      {
          if(!flag) {
              printf("Case %d:\n",t++);
              flag=true;
          }
          for( i=1;i<y-1;i++)
              printf("%d ",Circle[i]);
          printf("%d\n",Circle[i]);
          return ;
      }
    
      for( i=2;i<=n;i++)
          if(!Visit[i]&&prime[x+i]==1)
          {
             Circle[y++]=i;
             Visit[i]=true;
             Dfs(i,y);
             y--;
             Visit[i]=false;
          }
    
    }
    
    int main()
    {
        
       while(scanf("%d",&n)==1)
       {
           flag=false;
           memset(Visit,false,sizeof(Visit));
           Visit[1]=true;
           Circle[1]=1;
           Dfs(1,2);
           printf("\n");
       }
        return 0;
    }
     
  • 相关阅读:
    Jquery中的bind()方法绑定事件总结
    composer常用命令
    Activity四种启动模式
    谷歌搜索技巧
    关于Android studio Haxm加速器安装
    关于Ping和Tracert命令原理详解
    皮尔逊相关系数
    head标签
    wireshark抓包
    数据结构与算法自学系列之动态规划(一)
  • 原文地址:https://www.cnblogs.com/hzg656343072/p/2627018.html
Copyright © 2020-2023  润新知