educoder算法设计与分析 实验五回溯法

第1关:排列

题目描述:

1.设计算法从前m个大写字母(m≤26)种取出n个字母的所有排列(组合),并编程实现

输入格式

输入M N
1<=M=26, N<=M

输出格式

按字典序输出排列
注意:行末不输出多余空格

测试输入:

4 2

预期输出:

A B
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C

分析:

  
代码实现:

#include<stdio.h>

void Perm(int a[],int b[],int c[],int n,int m,int L){
   
     if(n==L){
   
        for(int i = 0; i <L; i++) {
   
            if(i==L-1){
   
               printf("%c\n",c[i]);
            }
            else{
   
                 printf("%c ",c[i]);
            }
        }  
        return;
     }
     else{
   
        for(int i=0;i<m;i++){
   
	         if(b[i]!=1){
   
	           c[n]=a[i];
	           b[i]=1;
	           Perm(a,b,c,n+1,m,L);
	           b[i]=0;
	         }
        }
     }
}

int main(){
   
      int m,n;
      scanf("%d %d",&m,&n);
      int a[m],b[m],c[n];
      for(int i=0;i<m;i++){
   
          a[i]='A'+i;
          b[i]=0;
      }
     Perm(a,b,c,0,m,n);
     return 0;
}

第2关:子集合

题目描述:

设集合S={x1,x2,…,xn}是一个正整数集合,c是一个正整数,子集和问题判定是否存在S的一个子集S1,使S1中的元素之和为c。试设计一个解子集和问题的回溯法?

输入格式

输入数据第1行有2个正整数n和c,n表示S的大小,c是子集和的目标值
接下来的1行中,有n个正整数,表示集合S中的元素
n<10,c<100

输出格式

输出所有满足条件的集合,当问题无解时,输出“No Solution!”。
注意:末尾不输出多余空格
按照输入顺序输出,比如第一个满足条件的子集合是[2 2 6],那么就先输出它,子集合内的数也按照输入顺序输出

测试输入:

5 10
2 2 6 5 4

预期输出:

2 2 6
6 4

分析:

代码实现:

#include<stdio.h>

void Chir(int s[],int b[],int c,int m,int &count,int L){
   
   if(m==L){
   
       int a=0;
       for(int i=0;i<L;i++){
   
	        if(a>c){
   break
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TSP(Traveling Salesman Problem)问题是一个NP难题,其问题描述为:给定一组城市以及每对城市之间的距离,求解访问每一座城市一次且仅访问一次并回到起始城市的最短路径。 遗传算法是一种基于自然选择和遗传学机制的全局搜索和优化算法,其适用于解决TSP问题。以下是使用遗传算法求解TSP问题的步骤: 1. 定义问题:定义城市集合以及每两个城市之间的距离。 2. 初始化种群:根据需要定义种群的大小,以随机方式生成一个个体作为种群的初始解。这些解可以是任意的路径。 3. 适应度函数:定义每条路径的适应度函数,将适应度函数设计为距离函数,使距离较短的路径具有更高的适应度。 4. 选择算子:根据适应度函数选择个体进行交叉和变异操作。较短路径的个体具有更高的选择概率。 5. 交叉算子:通过交换两个个体的部分路径,生成新的个体。 6. 变异算子:通过随机选择某个个体,改变其部分路径,生成新的个体。 7. 选择新一代个体:根据适应度函数选择新一代个体。 8. 终止条件:达到预设的结束条件,如达到最大迭代次数。 9. 输出结果:输出最优路径及其距离。 在每一代迭代过程中,适应度函数用于评估每个个体的优劣程度。较短的路径在自然选择过程中被普遍保留和延续,较长路径则被淘汰。经过交叉和变异运算后,保留的解将会形成一个新的更优的种群,从而逐渐找到问题的最优解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xingcheng--dp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值