DFS求解素数环问题

来源:互联网 发布:ubuntu 根目录不足 编辑:程序博客网 时间:2024/04/29 15:09

素数环
每相邻的两个数之和为素数,DFS搜索+素数判断题目链接

#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 50int a[50];bool vis[N];int n;bool judge(int x,int y){    int m=x+y;    for(int i=2;i*i<=m;i++)        if(m%i==0)            return false;    return true;}//int count;void dfs(int cur){    if(cur==n&&judge(a[0],a[n-1]))    {        for(int i=0;i<n;i++)        {            if(!i)                cout<<a[i];            else                cout<<" "<<a[i];        }        cout<<endl;       // count=0;    }    else    {        for(int i=2;i<=n;i++)        {            if((!vis[i])&&judge(i,a[cur-1]))            {                vis[i]=true;                a[cur++]=i;                dfs(cur);               vis[i]=false;                cur--;            }        }    }}int main(){    int num=0;    while(cin>>n)    {        a[0]=1;        memset(vis,false,sizeof(vis));        printf("Case %d:\n",++num);        dfs(1);        cout<<endl;    }    return 0;}
0 0
原创粉丝点击