码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1016: Prime Ring Problem

时间:2018-07-18 21:40:39      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:clu   cal   beginning   play   tom   open   ini   none   ISE   

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

分析:dfs深搜,满足条件就加入num数组,并把加入的数置零。

因为数据范围在20以内,素数加和必定小于40,可以放个素数表~

技术分享图片
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
int prime[15]={2,3,5,7,11,13,17,19,23,29,31,37};
int n,c,num[25],allnum[55];
void init() {
    c=0;
}
bool isprime(int num){
    range(i,0,11)if(num==prime[i])return true;
    return false;
}
bool dfs(int pre,int pos,int flag){
    if(!isprime(pre+pos))return false;
    num[flag]=pos;
    if(flag==n&&isprime(pos+1)){
        range(i,1,n)cout<<num[i]<<(i==n?\n: );
        return true;
    }
    allnum[pos]=0;
    range(i,2,n)if(allnum[i]&&dfs(pos,i,flag+1))break;
    allnum[pos]=1;
    return false;
}
void solve(){
    while(cin>>n){
        range(i,1,n)allnum[i]=i;
        num[1]=1;
        cout<<"Case "<<++c<<":"<<endl;
        if(n==1){cout<<1<<endl;continue;}
        range(i,2,n)dfs(1,i,2);
        cout<<endl;
    }
}
int main() {
    init();
    solve();
    return 0;
}
View Code

 

HDU 1016: Prime Ring Problem

标签:clu   cal   beginning   play   tom   open   ini   none   ISE   

原文地址:https://www.cnblogs.com/Rhythm-/p/9332581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!