• rwkj 1422搜索(素数环)


      算法分析与设计:搜索(素数环)

    时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:178            测试通过:35

    描述

     

    将1-n这n个数摆成一个环,要求相邻的两个数的和是一个素数,编程输出所有可能的解。

    输入

     

    包括多组数据,每组1个数n。n<20

    输出

     

    所有可能的解。

    输出格式见样例。

    样例输入

    6 8

    样例输出

    Case 1: 1 4 3 2 5 6

                1 6 5 2 3 4
    Case 2: 1 2 3 8 5 6 7 4

                1 2 5 8 3 4 7 6

                1 4 7 6 5 8 3 2

                1 6 7 4 3 8 5 2

     

     

     

     

     

    #include <iostream>
    using namespace std;
    int a[20],n;
    int used[20];
    int is_prime(int x)
    {
        int i;
        for(i=2;i<x;i++)
        if(x%i==0) return 0;
        return 1;
    }
    void dfs(int cur)
    {
        int i;
        if(cur==n&&is_prime(a[1]+a[n]))
        {
            for(i=1;i<n;i++) cout<<a[i]<<" ";
            cout<<a[n]<<endl;
            return ;
        }
        for(i=2;i<=n;i++)
        {
            if(is_prime(a[cur]+i)&&used[i]==0)
            {
                a[cur+1]=i;used[i]=1;dfs(cur+1);used[i]=0;
            }
        }
    }
    int main(int argc, char *argv[])
    {
        int c;
        c=1;
        while(cin>>n)
        {
            memset(used,0,sizeof(used));
            used[1]=1;a[1]=1;
            
            cout<<"Case "<<c++<<":"<<endl;
            if(n%2==0)
            dfs(1);
            cout<<endl;
            
        }
        return 0;
    } 
    View Code

    #include <iostream>
    using namespace std;
    int a[20],n;
    int used[20];
    int is_prime(int x)
    {
    int i;
    for(i=2;i<x;i++)
    if(x%i==0) return 0;
    return 1;
    }
    void dfs(int cur)
    {
    int i;
    if(cur==n&&is_prime(a[1]+a[n]))
    {
    for(i=1;i<n;i++) cout<<a[i]<<" ";
    cout<<a[n]<<endl;
    return ;
    }
    for(i=2;i<=n;i++)
    {
    if(is_prime(a[cur]+i)&&used[i]==0)
    {
    a[cur+1]=i;used[i]=1;dfs(cur+1);used[i]=0;
    }
    }
    }
    int main(int argc, char *argv[])
    {
    int c;
    c=1;
    while(cin>>n)
    {
    memset(used,0,sizeof(used));
    used[1]=1;a[1]=1;

    cout<<"Case "<<c++<<":"<<endl;
    if(n%2==0)
    dfs(1);
    cout<<endl;

    }
    return 0;
    }

     

     


     

  • 相关阅读:
    深究AngularJS——自定义服务详解(factory、service、provider)
    学习AngularJs:Directive指令用法(完整版)
    理解Angular中的$apply()以及$digest()
    javascript关闭网页的几种方法
    grunt
    原生ajax
    服务器返回JSON,IE出现下载问题
    设计模式学习笔记——Mediator中介者模式
    Html.Partial
    SAML
  • 原文地址:https://www.cnblogs.com/2014acm/p/3903008.html
Copyright © 2020-2023  润新知