网上查寻可以知道
回溯法有通用解法的美称,对于很多问题,如迷宫等都有很好的效果。回溯算法实际上一个类似枚举的深度优先搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回(也就是递归返回),尝试别的路径。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。回溯法说白了就是穷举法。回溯法一般用递归来解决。
#include"pch.h"
#include <stdio.h>
# define
int set[N] = { 1,2,3 };
int sub[N];
void sub_set(int t)
{
if (t > N - 1)
{
int i = 0;
for (i = 0; i < N; i++)
{
if (sub[i] != 0)
printf("%d ", set[i]);
}
printf("\n");
return;
}
printf("t0=%d\n", t);
sub[t] = 1;
sub_set(t + 1);
sub[t] = 0;
printf("t=%d,sub[0]=%d,sub[1]=%d,sub[2]=%d\n", t, sub[0], sub[1], sub[2]);
sub_set(t + 1);
printf("t1=%d,sub[0]=%d,sub[1]=%d,sub[2]=%d\n", t, sub[0], sub[1], sub[2]);
}
int main()
{
sub_set(0);
}
我的愚见:
sub[t] = 1;//数值上去
sub_set(t + 1);//递归回口一,回到小的上一次
sub[t] = 0; //递归回调后,头不取
sub_set(t + 1);//数值再微上去,递归回口二,回到最初的上一次