zoukankan      html  css  js  c++  java
  • HDU1016 Prime Ring Problem(搜索,DFS)

    题目链接

    分析:

    先求出素数表。再DFS。

    #include <stdio.h>
    #include <string.h>
    
    #define MAXN 21
    
    int isp[MAXN+MAXN], num[MAXN], n, vis[MAXN], cnt;
    
    void prime(){
        int i, j;
        memset(isp, -1, sizeof(isp));
        isp[0] = isp[1] = 0;
        for(i=2; i<=MAXN+MAXN; i++){
            if(isp[i])
                for(j=i*i; j<=MAXN+MAXN; j += i)
                    isp[j] = 0;
        }
    }
    
    void dfs(int cur){
        int i;
        if(cur == n && isp[num[0]+num[n-1]]){
            for(i=0; i<n; i++){
                if(i != n-1) printf("%d ", num[i]);
                else printf("%d\n", num[i]);
            }
        }
        else{
            for(i=2; i<=n; i++)if(!vis[i] && isp[num[cur-1]+i]){
                num[cur] = i;
                vis[i] = 1;
                dfs(cur+1);
                vis[i] = 0;
            }
        }
    }
    
    int main(){
    
        prime();
    
        while(scanf("%d", &n) == 1){
            cnt++;
            memset(vis, 0, sizeof(vis));
            printf("Case %d:\n", cnt);
            vis[1] = 1; num[0] = 1;
            dfs(1);
            putchar('\n');
        }
    
        return 0;
    }
  • 相关阅读:
    反序列化
    反序列化使用
    Serializer序列器
    DRF工程搭建
    JDK目录介绍
    Java环境变量配置
    Java语言的特性
    Java语言概述
    计算机编程语言介绍
    软件开发介绍
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2932414.html
Copyright © 2011-2022 走看看