【算法设计与分析】—— 整数划分问题 (回溯法)

我前几天写了一篇csdn博客文章:【算法设计与分析】——整数划分问题,使用的是递归方法,今天准备使用回溯法啦啦啦啦啦~

上一篇链接:算法设计与分析——整数划分问题(递归法)

首先我给大家画了一个流程图:

在这里插入图片描述
其次我给大家录了一个视频讲解:

因为csdn博客中上传的视频目前仅支持腾讯优酷bilibili,所以我上传到资源啦,但是免费哦~

视频讲解链接:整数划分问题(回溯法)视频讲解

代码实现

大家如果还是看不懂代码,可以自己选取一个简单的例子在草稿纸上演示一遍哦~

#include<stdio.h>

int nums[100];   //nums用来存放需要放入的数据
int count = 0;  //count用来记录一共有多少种划分方法

int integerDivide(int cur,int sum,int p,int n){ 
    
//cur表示当前使用的数组位置 sum表示当前使用位置中所存放的数据之和 p表示当前要划分的数 n表示需要划分的数

        if(sum > n) return;

        if(sum == n){

            count++;
            printf("%d=",n);

            for (int i = 0; i < cur; i++) {  //用来控制输出
                if (i==cur-1)
                    printf("%d",nums[i]);
                else printf("%d+",nums[i]);
            }
            printf("\n");
            return;
        }

        for (int i=p;i>0;i--){    //回溯法
            nums[cur] = i;
            integerDivide(cur+1,sum+i,i,n);
        }

         return count;
    }

int main(){

        int n,s;
        printf("请输入你想要划分的正整数n:\n");
        scanf("%d",&n);
        s=integerDivide(0,0,n,n);
        printf("该正整数%d一共有%d种划分方法!\n",n,s);

        return 0;
}

结果示例

  • 示例一
    在这里插入图片描述
  • 示例二
    在这里插入图片描述
  • 示例三
    在这里插入图片描述
原创文章 54 获赞 73 访问量 9528

猜你喜欢

转载自blog.csdn.net/qq_43779149/article/details/106118388