Prime Ring Problem UVA

来源:互联网 发布:c语言优先级排序 编辑:程序博客网 时间:2024/06/02 02:57

问题类型:DFS枚举+回溯。

问题链接、
03pie’s solution for [UVA-524]:

#include<iostream> #include<cstring>#include<cmath>using namespace std;const int maxn=16+1;int vst[maxn];int ans[maxn];bool isp(int n){    for(int i=2;i<=(int)sqrt(n);i++)        if(n%i==0)  return false;    return true;}void dfs(int n,int pos){     if(pos==n&&isp(ans[0]+ans[n-1])){        for(int i=0;i<n-1;i++)            cout<<ans[i]<<" ";        cout<<ans[n-1]<<endl;    }    else        for(int i=2;i<=n;i++)            if(!vst[i]&&isp(i+ans[pos-1])){                vst[i]=1;                ans[pos]=i;                dfs(n,pos+1);                vst[i]=0;            }}int main(){    int n,kase=0;    while(cin>>n){        if(kase)cout<<endl;        cout<<"Case "<<++kase<<":"<<endl;        memset(vst,0,sizeof(vst));        memset(ans,0,sizeof(ans));        ans[0]=1;        dfs(n,1);    }    return 0;}
原创粉丝点击