zoukankan      html  css  js  c++  java
  • hdu 1016

    这是一道考搜索的题目。这道题我用深搜解决了,不过说实话自己对于深搜理解得并不深刻,在这里对于这一题总结一下。

    这道题输入为一个实数n,要求输出有1~n这n个数所组成的所有素数环(这是素数环),素数环的要求是任意一个数字分别和其前后两个数字相加都要是素数,且数字1始终作为环展成条后的第一位。

    深度搜索:从一个节点开始,若与它相连的节点有满足条件的点,就对该点进行搜索,否则返回到上一个节点,知道遍历了所有节点。

    在这道题中,由于它要求输出所有符合条件的数字串,那么在操作过程中会遇到不符合条件的数字串,但是这些不符合条件的数字串可能在前几个数字是符合的仅是后几位数字与答案所需数字串不符合,

    这里就需要用到栈这一数据结构来处理这一问题,将先前入栈后来出现问题的数字弹出栈或者将之前弹出栈而后又符合条件的数字入栈,这样就可以做到将所有可能的结果不遗漏并且排除掉了不符合条件的。

    #include<stdio.h>
    #include<string.h>
    int t[21];
    int a[21];
    int k,num=1;
    void search(int x,int m)
    {
    int i,mark=0,last=1;
    if(k<m)
    {
    for(i=1;i<=m;i++)
    {
    int flag=1;
    if(t[i]==0)
    {
    int j,y;
    y=x+i;
    for(j=2;j<y/2;j++)
    {
    if(y%j==0)
    {
    flag=0;
    break;
    }
    }
    if(flag)
    {
    k++;
    a[k]=i;
    t[i]=1;
    search(i,m);
    }
    }
    }
    }
    else
    {
    int j,y;
    y=a[k]+1;
    for(j=2;j<y/2;j++)
    {
    if(y%j==0)
    {
    t[a[k]]=0;
    a[k]=0;
    k--;
    last=0;
    break;
    }
    }
    if(k==m)
    {
    for(j=1;j<=m;j++)
    {
    if(j==1)
    printf("%d",a[j]);
    else
    printf(" %d",a[j]);
    }
    printf(" ");
    }
    }
    if(last)
    {
    t[a[k]]=0;
    a[k]=0;
    k--;
    }
    }
    int main()
    {
    int n;
    while(scanf("%d",&n)!=EOF)
    {
    memset(t,0,sizeof(t));
    memset(a,0,sizeof(a));
    t[1]=1;
    a[1]=1;
    k=1;
    printf("Case %d: ",num);
    num++;
    search(1,n);
    printf(" ");
    }
    return 0;
    }

  • 相关阅读:
    前端之html的常用标签2和css基本使用
    前端之前端介绍或html的常用标签1
    mysql之练习题4
    mysql之零碎知识
    mysql之索引查询2
    python对象类型----数字&字符串
    初识python---简介,简单的for,while&if
    Shell 语句
    正则表达式----grep
    EG:nginx反向代理两台web服务器,实现负载均衡 所有的web服务共享一台nfs的存储
  • 原文地址:https://www.cnblogs.com/hbutACMER/p/4218942.html
Copyright © 2011-2022 走看看