杭电1016

来源:互联网 发布:2016淘宝联盟双十一 编辑:程序博客网 时间:2024/05/29 17:17

上链接:杭电1016


题目大意:

从1到6排成一个环(可以不按顺序),满足相邻两个数的和为素数,输入1-20的数,输出可能存在的环


#include <cstdio>#include <cstring>using namespace std;int c;int num[21];bool state[21];bool IsPrime(int n){    if(n==2 || n==3 || n==5 || n==7 || n==11 || n==13 || n==17 || n==19 || n==23 || n==29 || n==31 || n==37 || n==39 )        return true;    else return false;}void dfs(int n){    if(n == c+1)    {        if(!IsPrime(1+num[n-1])) return;        printf("1");        for(int i=2; i<=c; ++i)            printf(" %d", num[i]);        printf("\n");    }    else    {        for(int i=2; i<=c; ++i)        {            if(state[i]) continue;            if(IsPrime(num[n-1]+i))            {                num[n]=i;                state[i]=1;                dfs(n+1);                state[i]=0;            }        }    }}int main(){    int logo=0;    while(scanf("%d", &c)!=EOF)    {        ++logo;        printf("Case %d:\n", logo);        memset(state,0,21);        num[1] = 1;        state[1] = true;        dfs(2);        printf("\n");    }    return 0;}

注意问题:

1.深搜剪枝

2.注意输出格式

0 0
原创粉丝点击