uva 524回溯经典题素数环

来源:互联网 发布:淘宝商品品牌怎么填写 编辑:程序博客网 时间:2024/05/21 18:34

这个题就是直接回溯的方法结合紫书上写的,学习一波回溯。 我这个没有打表直接判断的时候是素数,没有超时,

#include <iostream>#include <cstdio>#include <iomanip>#include <algorithm>#include <cmath>#include <cstring>using namespace std;const int maxn = 1000 + 10;int vis[maxn];int A[maxn] = {0};int num;int judge(int n){    for(int i = 2; i <= sqrt(n); i++)    {        if(n % i == 0)            return 0;    }    return 1;}void dfs(int cur){    if(num == cur && judge(A[0] + A[num - 1]))    {        for(int i = 0; i < num; i++)        {            if(i == 0)                printf("%d",A[i]);            else                printf(" %d",A[i]);        }        putchar('\n');    }    else    {        for(int i = 2; i <= num; i++)        {            if(!vis[i] && judge(i + A[cur - 1]))            {                A[cur] = i;                vis[i] = 1;                dfs(cur+1);                vis[i] = 0;            }        }    }}int main(){    int num1 = 0;    while(scanf("%d",&num) != EOF)    {        memset(vis,0,sizeof(vis));        if(num1)            printf("\n");        printf("Case %d:\n",++num1);        A[0] = 1;        vis[0] = 1;        dfs(1);    }    return 0;}



原创粉丝点击