现在的位置: 首页 > 综合 > 正文

hdu1016 Prime Ring Problem

2018年04月29日 ⁄ 综合 ⁄ 共 683字 ⁄ 字号 评论关闭
本题 就是对相邻两个数是不是素数进行判断,

对于每个数使用时要标记  用后 取消标记。

注意要对第一个和最后一个进行判断。

#include <iostream>
#include <cstring>
using namespace std;
int n,visited[30],buffer[30],ans,flag;
bool is_prime(int x,int y)
{
    int sum=x+y;
    for(int i=2;i*i<=sum;i++)
    {
        if(sum%i==0)
            return 0;
    }
    return 1;
}

void dfs(int cur)
{
    visited[1]=1;
    if(cur>n && is_prime(buffer[1],buffer[n]))
    {

        if(!flag)
        {
            printf("Case %d:\n",ans);
            flag=1;
        }
        for(int i=1;i<n;i++)
        {
            printf("%d ",buffer[i]);
        }
        printf("%d\n",buffer[n]);

    }
    else
    {
        for(int i=2;i<=n;i++)
        {
            buffer[cur]=i;
            if(!visited[i] && is_prime(buffer[cur-1],buffer[cur]))
            {
                visited[i]=1;
                dfs(cur+1);
                visited[i]=0;
            }
        }
    }
}

int main()
{
    ans=0;
    while(scanf("%d",&n)!=EOF)
    {
        ans++;
        flag=0;
        memset(visited,0,sizeof(visited));
        buffer[1]=1;
        dfs(2);
        printf("\n");
    }
    return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.