hdu1016

来源:互联网 发布:淘宝历史最低价 影响 编辑:程序博客网 时间:2024/05/21 00:17
//深搜,注意最后还要和1相加判断是不是素数;#include <iostream>#include <cstdio>#include <cstring>using namespace std;int mp[100], b[100];int mark[100];int a[100];int n, k, h = 0;void inint(){    memset(a, 0, sizeof(a));    for(int i = 2; i*i <= 100; i++)        for(int j = i; j*i < 100; j++)            if(!a[j*i]) a[j*i] = 1;}void dfs(int x){    if(k == n-1)    {        if(a[b[n-2]+1]) return ;        printf("1");        for(int i = 0; i < n-1; i++)            printf(" %d", b[i]);        printf("\n");        return ;    }    for(int i = 2; i <= n; i++)        if(!mark[i] && !a[mp[i]+x])        {            b[k++] = mp[i];            mark[i] = 1;            dfs(mp[i]);            mark[i] = 0;            k--;//如果这个数不符合 下一个数还要在这个位置,k不变        }    return ;}int main(){    while(cin >> n)    {        printf("Case %d:\n", ++h);        inint();        for(int i = 1; i <= n; i++) mp[i] = i;        memset(mark, 0, sizeof(mark));        mark[1] = 1;        k = 0;        dfs(1);        printf("\n");    }}

原创粉丝点击