美文网首页
回溯法求解素数环

回溯法求解素数环

作者: Albert_Sun | 来源:发表于2016-03-24 16:16 被阅读1094次
#include<stdio.h>
#include<stdlib.h>

#define n 16

int num = 0;
int A[n] = {0};
int isp[n*2] = {0};
int vis[n] = {0};

void dfs(int cur){
    int i;

    if(cur == n && isp[A[0] + A[n-1]]){ //递归边界。测试第一个数和最后一个数
        printf("%8d:",++num);
        for(i = 0; i < n; i++){
            printf("%3d", A[i]); //打印方案
        }
        printf("\n");
    }else{
        for(i = 2; i <= n; i++){   //尝试放置每个数i
            if(!vis[i] && isp[i + A[cur-1]]){ //如果i没有用过,并且与前一个数之和为素数
                A[cur] = i;
                vis[i] = 1;  //设置使用标志
                dfs(cur+1);
                vis[i] = 0;   //清除使用标志
            }
        }
    }
}

int is_prime(int un)
{
    int i = 0;

    for(i = 2; i <= un / 2; i++){
        if(un % i == 0){
            return 0;
        }
    }

    return 1;
}

int main()
{
    int i;

    for(i = 2; i <= n*2; i++){
        isp[i] = is_prime(i);
    }

    for(i = 0; i < n; i++){
        A[i] = i + 1;
    }

    dfs(1);

    return 0;
}

相关文章

  • 回溯法求解素数环

  • 深度优先搜索做题笔记_待整理

    回溯法:彻头彻尾的理解回溯算法 一、拆分回文串 Palindrome Partitioning 求解多个结果,用D...

  • 搜索与回溯算法模板及其应用

    本文介绍了搜索与回溯算法模板及其应用,主要包括: 【1】 搜索与回溯算法基本思想【2】模板算法1及其应用(素数环问...

  • 迷宫问题

    method1 递归求解 method2 队列法 method3 栈和回溯法 有错误

  • 分支限界法

    分支界限法原理   分支限界法和回溯法是类似的问题求解方法。回溯法是通过深度优先的方式对问题进行探索性的解决,而分...

  • 回溯法(DFS)

    应用场景 回溯法的求解目标是找出解空间树中满足约束条件的所有解。 回溯实现全排列

  • 暴力穷举和回溯法(八皇后问题)

    以前每次遇到算法问题都是直接暴力求解,一直以为自己用的是暴力穷举法,现在学了回溯法,发现部分问题其实使用的是回溯法...

  • 软件设计师考试 | 第八章 算法设计与分析 | 分支限界法

    分支限界法类似于回溯法,也是一种在问题的解空间树上搜索问题解的算法。 一般情况下,分支限界法与回溯法的求解目标不同...

  • (四) 回溯法(试探算法)

    深度优先搜索 + 剪枝。回溯法的求解目标一般是找出解空间树中满足约束条件的所有解。 # 在学习回溯和分支限界法之前...

  • 回溯法

      回溯法是一种通过不断尝试获得问题解的办法。“回溯”的含义是发现当前已经不满足求解的条件时,则采用“回溯”的方式...

网友评论

      本文标题:回溯法求解素数环

      本文链接:https://www.haomeiwen.com/subject/lhurlttx.html