
算法
IT_Bonnie
这个作者很懒,什么都没留下…
展开
-
回溯---n后递归和非递归方法
把棋盘存储为一个N维数组a[N],数组中第i个元素的值代表第i行的皇后位置,这样便可以把问题的空间规模压缩为一维O(N)。 在判断是否冲突时也很简单,首先每行只有一个皇后,且在数组中只占据一个元素的位置,行冲突就不存在了,其次是列冲突,判断一下是否有a[i]与当前要放置皇后的列j相等即可。至于斜线冲突,通过观察可以发现所有在斜线上冲突的皇后的位置都有规律即它们所在的...原创 2019-10-02 12:00:42 · 643 阅读 · 0 评论 -
动态规划---0-1背包
题意 :(判断是01背包的关键是:每种只有一个,且不能放回)背包体积为V 有n个物品 体积为v[i]价值为w[i]求解背包能装进去的物品最大价值思路:用一个二维数组dp[ i ][ j ]代表面对第i个物品时 且 背包容量为 j 时 背包内的最大价值从第1个物品到第n个依次决定放不放入背包,背包容量依次从小到大(其实就相当于背包的总容量V装过东西后剩余的容量)对于第i...原创 2019-10-02 12:00:59 · 183 阅读 · 0 评论 -
螺旋队列
螺旋队列,数字排序就是这样以下图这样的螺旋排列,细心看后会发现数字是以顺时针的旋转递增,每圈的最大数字是红色圈圈匡住的数字,设1的坐标是(0,0,)为原点方向,按常理逻辑以上为y轴的正方向,以右为x轴的正方向,以数10的坐标为(2,1),数20的坐标为(-2,1),数22的坐标为(-1,2),数16的坐标为(-1,-2)为例子,我们可以发现: 从0层的1,到1层的9,...原创 2019-10-05 22:08:45 · 607 阅读 · 0 评论 -
全排列---分治法
采用分治算法,不断递归,例如给定数组arr={1,2,3},红色为打印,黑色为递归回退,大体如下图:代码如下:void Perm(int arr[],int k,int m){ if(k==m)//数组中只有一个元素 { for(int i=0;i<=m;++i) { cout<<arr[i]<<" "; } cout<...原创 2019-10-09 21:26:49 · 474 阅读 · 0 评论