1.8皇后/n皇后问题(循环嵌套/递归)

循环嵌套只能解决小数目的皇后问题,此处用递归最为灵活、恰当。

算法思路:

递归调用一个函数,用来摆放第k行的皇后(在0~k-1行皇后摆好的情况下,摆放第k行及其后的皇后):逐个尝试第k个皇后的位置,直到不冲突后继续调用自身摆放下一个皇后。当k=n时结束递归。

源程序:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 300
  4. int n;
  5. int col[N];
  6. void NQueen(int k)
  7. {
  8. int i,j;
  9. if(k==n)
  10. {
  11. for(i=0;i<n;i++)
  12. {
  13. printf("%d ",col[i]+1); //输出结果的每一行代表一种摆法,行里的第1个数字如果是n,表示第i行的皇后放在第n列
  14. }
  15. printf("\n");
  16. }
  17. for(i=0;i<n;i++)
  18. {
  19. for(j=0;j<k;j++)
  20. {
  21. if((col[j]==i)||(abs(k-j)==abs(col[j]-i)))
  22. {
  23. break;
  24. }
  25. }
  26. if(j==k)
  27. {
  28. col[k]=i;
  29. NQueen(k+1);
  30. }
  31. }
  32. }
  33. void main()
  34. {
  35. scanf("%d",&n);
  36. NQueen(0); //从第0行皇后开始摆放
  37. }

2.数字三角形(3.23续)

image.png
image.png
image.png
image.png

3.动态规划一般规律总结、基本思想、使用条件、设计步骤

image.png
image.png

4. 0-1背包问题

image.png
image.png
image.png
image.png

5.求最长上升子序列的长度

image.png
image.png