hdu素数环(搜索入门题)

来源:互联网 发布:chm文件制作软件 编辑:程序博客网 时间:2024/05/16 14:57

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

这是一道dfs入门题,题意简单,注意两个地方,一个是n为奇数时有两个奇数相邻,此时肯定无素数环,第二个是对于不同的dfs定义有不同的实现方法,个人建议入门应该尝试各种定义的dfs进行实现,看了下其他人写的代码稍加修改了下

#include <cstdio>#include <iostream>using namespace std;int prim[40];int path[25];int n;bool visited[25];void get_prim(void ){//筛法打表    fill(prim,prim+40,1);    for(int i=2;i<40;i++){        if(prim[i]){            for(int j=i*i;j<40;j+=i)                prim[j]=0;        }    }}void dfs(int m){    if(m==n+1&&prim[path[n]+1]){        printf("%d",path[1]);        for(int i=2;i<=n;i++)            printf(" %d",path[i]);        printf("\n");    }    else for(int i=2;i<=n;i++)            if(!visited[i]&&prim[i+path[m-1]]){                 visited[i]=true;                 path[m]=i;                 dfs(m+1);                 visited[i]=false;    }}int main(){    int cont=1;    path[1]=1;    get_prim();    while(scanf("%d",&n)!=EOF){        fill(visited,visited+25,false);        visited[1]=true;        printf("Case %d:\n",cont++);        if(!(n%2))        dfs(2);        printf("\n");    }    return 0;}


0 0
原创粉丝点击