回溯算法逐语句——史上最细

用一个例题来说明一下:

 代码如下:

 测试案例如:candidates[1,2,3,4] , taeget =5;

1.创建一维int型容器path;      //用来存放符合条件的单个数组

2.给int型sum初始化为1;         //sum用来存放数值之和

3.创建二维int型容器result;      //存放满足条件的总结果

4.调用backtracking函数                ①

5.不满足if1                                    ②

6.不满足if2                                    ③

7.进入for循环                                ④      i=0

8. sum=1

9.path=【1】

10.执行①

11.②

12.③ 

13. ④        i=0

14.sum=2

15.path=【1,1】

16.执行①②③④    i=0 

17.sum=3

18.path = 【1,1,1】

19.执行①②③④   i=0

20.sum=4

21.path = 【1,1,1,1】

22.执行①②③④  i=0

23.sum = 5

24.path=【1,1,1,1,1,】

25.执行①

26.②依旧不满足条件

27.③满足条件 result=【【1,1,1,1,1】】 结束此次循环

28.跳转到上次执行的④的下面(这里是因为递归,栈中会保留此函数)执行sum-=candidates【0】 sum=4

29.path=【1,1,1,1】

30.执行for循环   i=1

31.sum=6

32.path=【1,1,1,1,2】

33.执行④

34.sum>target 终止此次循环,跳转到sum-=

35.sum=4

36.path=【1,1,1,1】

37.执行for循环 i=2

38.sum=7;

39.path=【1,1,1,1,3】

40.sum>target 终止此次循环,跳转到sum-=

41.sum=4

42.path=【1,1,1,1】

43.执行for循环  i=3

44.sum=8

45.path=【1,1,1,1,4】

46.执行④

47.sum>target 终止此次循环,跳转到sum-=

48.sum=4

49.path=【1,1,1,1】

50.这时候i=4,没有办法执行for循环了,返回上一级backtacking函数,这就是递归与回溯,跳转到22行backtacking函数下方的sum-=处

51.sum=3

52.path=【1,1,1,】

53.执行for循环   i=1

54.sum=5

55.path=【1,1,1,2】

56.执行④

57.不满足①

58.满足② sum=target     result=【【1,1,1,1,1】,【1,1,1,2】 ,终止此次循环,跳转到sum-=

59.sum=3

60.path=【1,1,1】

61.下面就是一些重复过程,因为皆不满足条件1

62.执行完所有的for循环后,i=4,结束循环,跳转到19行的下方sum-=

接下来的重复过程就不在详述了,为了更好地理解回溯算法,这里就没有写剪枝的代码。

path数组变换过程如下:

1 1 1 1 1

1 1 1 1 2

1 1 1 1 3

1 1 1 1 4

1 1 1 2

1 1 1 2 2

1 1 1 2 3 

1 1 1 2 4 

1 1 2 2

1 1 2 3

1 1 2 4

1 1 3

1 1 3 3

1 1 3 4

1 1 4

1 1 4 4

1 2

1 2 2

1 2 3

1 2 4

1 3

1 3 3

1 3 4

1 4 

1 4 4

2 2 

2 3

2 4

3 3

3 4

4

4 4

点赞支持哦!~

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啥也不会的小白123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值