• 回溯算法求素数环


    原文地址:http://www.cnblogs.com/xwz0528/p/4638242.html

    一. 问题描述

    把从1到n(n>=2)这n个数摆成一个环,要求相邻的两个数的和是一个素数,找出所有满足条件的环。

    二. 问题分析

    1> 解向量:<x1, x2, ··· , xn>

    2> 解空间树:排列树,(n-1)!个叶子结点

    3> 剪枝函数:isPrime( x[t-1]+x[t] ),t=2,3,···,n  约束函数

    三. 算法实现

     1 #include<iostream>
     2 #include<math.h>
     3 using namespace std;
     4 
     5 int n;//素数环中的数字个数
     6 int sum=0;//可行方案数
     7 int arr[100];//存放素数环
     8 
     9 bool isPrime(int x)
    10 {
    11     int i;
    12     int k=(int)sqrt(x);
    13     for(i=2;i<=k;i++)
    14     {
    15         if(x%i==0)
    16         {
    17             return false;
    18         }
    19     }
    20     return true;
    21 }
    22 
    23 //回溯法
    24 void backtrack(int t)
    25 {
    26     int i;
    27     if(t>n)//搜索到叶子结点
    28     {
    29         if(isPrime(arr[n]+arr[1]))
    30         {
    31             sum++;
    32             for(i=1;i<=n;i++)
    33             {
    34                 cout<<arr[i]<<" ";
    35             }
    36             cout<<endl;
    37         }
    38     }
    39     else
    40     {
    41         for(i=t;i<=n;i++)
    42         {
    43             swap(arr[t],arr[i]);
    44             if(isPrime(arr[t-1]+arr[t]))
    45             {
    46                 backtrack(t+1);
    47             }
    48             swap(arr[t],arr[i]);
    49         }
    50     }
    51 }
    52 
    53 void main()
    54 {
    55     int i;
    56     cout<<"请输入素数环中数字的个数:";
    57     while(cin>>n)
    58     {
    59         sum=0;
    60         for(i=1;i<=n;i++)
    61         {
    62             arr[i]=i;
    63         }
    64         backtrack(1);
    65         cout<<"可行方案数为:"<<sum<<endl;
    66         cout<<"----------------"<<endl;
    67         cout<<"请输入素数环中数字的个数:";
    68     }
    69 }
  • 相关阅读:
    while循环和递归
    ASP.NET Core Swagger 显示接口注释
    ABP依赖注入
    EF Core 笔记
    .NET Core 管道过滤器扩展
    ABP权限认证
    552 you must authentication
    C# 多线程写文件,时常写不成功
    .Net 的一些插件
    多线程下HttpContext.Current 的问题
  • 原文地址:https://www.cnblogs.com/shutter/p/4734601.html
Copyright © 2020-2023  润新知