zoukankan      html  css  js  c++  java
  • hdu 1016(一道经典的dfs)

    题意:很容易理解,就是让你输出满足相邻的相加是素数的序列(注意不要重复)

    思路就是深搜思想把每种情况遍历一次

    代码实现:

    #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];
    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\n",a[num-1]);
       }
       else
       {
           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:\n",num);
             memset(visited,0,sizeof(visited));
             a[0]=1;
             dfs(1);
             printf("\n");
          }
          return 0;
    }
  • 相关阅读:
    2016.7.17
    2016.7.16
    2016.7.15
    2016.7.12
    2016.7.11
    2016.7.10
    coco2d-x中的坐标系问题
    cocos2d-x中的Tiled地图
    cocos2d-x中的Box2D物理引擎
    python文件处理及装饰器
  • 原文地址:https://www.cnblogs.com/jiangjing/p/2891621.html
Copyright © 2011-2022 走看看