算法
Italink
瞳閉 & 心開
展开
-
如何理解回溯的思想
小故事 某一天,一位牧师在森林里散步,他一不小心脚滑了,嗯,是脚滑了=.=,掉到了一个洞穴里,当他醒来时,发现自己居然落进了一个地下迷宫(真够背的),而牧师所处的这个密室周围有三道门,还好,不是三百道,还有希望,于是,牧师就开始想,该怎么出去呢?又没什么线索,难道要靠运气吗?唉~,想起运气,牧师慢慢闭上了自己的双眼,回忆起自己昨天的经历——跟一群三岁小孩子玩五分钱一局的掷色子游戏...原创 2018-11-21 21:29:03 · 1768 阅读 · 0 评论 -
回溯法解决n皇后问题
//8_4#include<iostream>#include<vector>using namespace std;int n = 8;vector <int> result(n), Left(2 * n + 1)/*左下线区域*/, Right(2 * n)/*右下线区域*/, visited(n);/*竖直区域*/void dfs(in...原创 2019-05-27 00:19:02 · 301 阅读 · 0 评论 -
回溯法数分解问题
给定一个正整数集合X={x1,x2,x3...,xn}和一个正整数y,设计回溯算法,求集合X的一个子集Y,使得Y中元素之和等于y//8_5#include<iostream>#include<vector>using namespace std;vector<int> X = { 1,2,3,4,5,6 }, result, visited(X...原创 2019-05-27 00:23:48 · 852 阅读 · 0 评论 -
桥本分数
桥本分数,吧{1,2,3,...,9}这9个数字填入图中的9个方格中使得等式成立(要求不得重复),使用回溯求解。//8_7#include<iostream>#include<vector>using namespace std;int n = 9;vector<int> result(n), visited(n + 1);void dfs...原创 2019-05-27 00:28:15 · 1006 阅读 · 1 评论 -
农夫过河(简洁回溯算法)
一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸。他要把这些东西全部运到北岸。他面前只有一条小船,船只能容下他和一件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜,否则狼会吃羊,羊会 吃白菜,所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,而狼不吃白菜。请求出农夫将所有的东西运过河的方案。避免出现重复步骤//Ex8_8#include&l...原创 2019-05-27 00:52:05 · 6063 阅读 · 0 评论 -
分支限界法处理0/1背包问题
问题描述:有4个物品,其重量分别为(4,7,5,3),价值分别为(40,42,25,12),背包容量为W=13。已知每个物品不可再分割,如何选择装入背包的物品,使得装入背包中的物品的总价值最大。使用分支限界法求解该问题#include<iostream>#include<vector>#include<queue>using namespac...原创 2019-05-30 16:49:44 · 17527 阅读 · 6 评论 -
迷宫问题(dfs and bfs)
迷宫问题的求解是实验心理学的一个经典问题.,心理学家把一只老鼠从一个无顶盖的大盒子的入口赶进迷宫,迷宫中设置很多壁障,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口放置了奶酪,吸引老鼠在迷宫中寻找通路以到达出口。设计回溯算法实现迷宫求解。#include<iostream>#include<vector>#include<queue>...原创 2019-05-23 20:20:32 · 1681 阅读 · 0 评论 -
可重复访问的有向TSP问题(C++)
#include<iostream>#include<vector>#include<map>#include<queue>using namespace std;int node = 4; //假设有4个结点map<string, map<string, int>> mp; ...原创 2019-06-04 18:44:47 · 1503 阅读 · 5 评论 -
走台阶问题(递归 or 记忆递归 or DP)
题目:有一个楼梯,甲现在位于第0阶,每次可以上1阶,2阶,3阶,那么到达第N阶共有多少种走法?Input对于每组数据:第一行,包含一个数字N。(1<=N<=30)Output对于每组数据:第一行,输出到达第N阶共有多少种走法SampleInput1210SampleOutput12274递归:#include<stdio.h&...原创 2019-07-18 09:30:17 · 690 阅读 · 0 评论 -
回溯(dfs)法解决0/1背包问题
给定背包容量W=20,以及6个物品。重量分别为(5,3,2,10,4,2),价值分别为(11,5,15,18,12,6),求解此背包问题。//Ex8_2#include<iostream>#include<vector>using namespace std;int W = 20;vector<pair<int, int>> ba...原创 2019-05-27 00:15:55 · 6031 阅读 · 0 评论 -
图(三)着色问题
//Ex8_1 图着色问题#include<iostream>#include<vector>using namespace std;const int MAX = 100;struct Node{ int color; vector<int> link; bool visited = false;}node[MAX];int n...原创 2019-05-27 00:13:32 · 1170 阅读 · 0 评论 -
算法设计与分析习题三-算法小练
3-2:分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4。#include<iostream>using namespace std;long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a%b);}int main() { long long a,...原创 2019-04-05 10:13:36 · 3767 阅读 · 1 评论 -
算法练习——分治
4-5:设计分治算法求一个数组的最大元素://Ex4_5#include<iostream>#include<vector>#include<algorithm>using namespace std;template<typename T>T getMax(vector<T> &vc, int begin, i...原创 2019-04-11 19:37:04 · 951 阅读 · 0 评论 -
最近点对问题——分治、蛮力时间性能对比
#include<iostream>#include<vector>#include<cmath>#include<algorithm>#include<Windows.h>#include<time.h>using namespace std;struct Point { //点 int x, y;...原创 2019-04-11 12:55:50 · 914 阅读 · 0 评论 -
乘积和运算(毫秒级优化)
N,M为50000,要求4秒内给出结果,题意:比如n是5m是6就是求1*11*21*31*41*51*62*12*22*32*42*52*6.......5*6的加一起是多少毫秒级优化:论坛地址:https://bbs.csdn.net/topics/392609890#post-403885599第i行:1*i+2*i+3*i+...原创 2019-05-08 18:14:44 · 282 阅读 · 0 评论 -
哈夫曼编码问题(C++ and 贪心 and 指针运用)
1. 哈夫曼编码问题问题描述:设需要编码的字符集为{d1, d2, …, dn},它们出现的频率为{w1, w2, …, wn},应用哈夫曼树构造最短的不等长编码方案。提示:哈夫曼树(Huffman Tree),又叫最优二叉树,指的是对于一组具有确定权值的叶子结点的具有最小带权路径长度的二叉树。哈夫曼树的构造算法:假设有n个权值,则构造出的哈夫曼树有n个叶子结点。n个权值分别设为w1,...原创 2019-05-16 17:00:19 · 2875 阅读 · 0 评论 -
贪心法解决背包问题
背包问题问题描述:给定n 种物品和一个容量为C的背包,物品i的重量是wi,其价值为vi,背包问题是如何选择装入背包的物品,使得装入背包中物品的总价值最大。注意:和0/1背包问题的区别,在背包问题中,可以将某种物品的一部分装入背包中,但不可重复装入。提示:用贪心算法求解背包问题的关键是如何选择贪心策略,使得按照一定的顺序选择每个物品,并尽可能的装入背包,直到装满。至少有三种贪心策略:(...原创 2019-05-16 17:47:17 · 5153 阅读 · 0 评论 -
货币支付问题(递归 or DP)
有面值为(v0,v1,v2,v3,v4...),的n种货币,需要支付cost,这样支付可以使得支付的货币数量最少?#include<iostream>#include<vector>using namespace std;const int MAX = 1000;int cost = 220;vector<int> face_value = { ...原创 2019-05-12 18:48:19 · 978 阅读 · 0 评论 -
阿克曼(Ackermann)函数
阿克曼函数定义如下:#include<iostream>#include<vector>using namespace std;int A(int m, int n) { cout << m << ',' << n << endl; if (m == 0) return n + 1; else if...原创 2019-05-12 19:12:29 · 5761 阅读 · 0 评论 -
Gipsy期望数
Gipsy小姐姐有一个数列,数列总和共有n个数,每个数的值为Ci,但是Gipsy并不喜欢它,她每次可以选择一个数i(2<=i<=n-1),并将Ci的值变为C[i]`=C[i+1]+C[i-1]-C[i],Gipsy可以这样caoz操作无数次,直到对于任意的Ci,其值变为Gipsy希望的值Ti输入格式: 第一行输入一个n,n的范围在2到100000之间 第二行输入n个数,...原创 2019-09-07 16:12:08 · 358 阅读 · 3 评论