hdoj1016

来源:互联网 发布:kali linux 路由转发 编辑:程序博客网 时间:2024/05/21 11:32

题意很简单不多说。

这是道dfs的题目,比较简单,特别注意,最后一个数跟第一个数的和也要是素数。

下面是代码:

#include<iostream>#include<cstring>#include<cmath>using namespace std;int a[25];int vis[25];int b[25];int n;bool is_prime(int m){    int k=sqrt(m*1.0);    int i;    if(m==1)        return false;    for(i=2; i<=k; i++)        if(m%i==0)            break;    if(i>k)        return true;    return false;}void dfs(int num){    if(num==n)    {        if(is_prime(b[n-1]+1))        {            cout<<b[0];            for(int i=1; i<n; i++)                cout<<' '<<b[i];            cout<<endl;        }        return;    }    for(int i=2; i<=n; i++)    {        if(!vis[i]&&is_prime(a[i]+b[num-1]))        {            vis[i]=1;            b[num]=a[i];            dfs(num+1);            vis[i]=0;        }    }    // return false;}int main(){    int loop=0;    while(cin>>n)    {        cout<<"Case "<<++loop<<":"<<endl;        b[0]=1;        memset(vis,0,sizeof(vis));        for(int i=1; i<=n; i++)            a[i]=i;        dfs(1);        cout<<endl;    }    return 0;}


原创粉丝点击