![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计与分析
cqggcqggcqggcqgg
这个作者很懒,什么都没留下…
展开
-
回溯法求解旅行售货员问题
#include<iostream>#define MAXSUM 100#define INF 65535using namespace std;class TSP{ //TSP类public: int bestv; //最优解即最短路径 int tempv; //当前路径长度 int node; //节点个数 int edge; //无向边条数 int adj[MAXSUM][MAXSUM]; //邻接矩阵存储无向边信息转载 2020-12-23 20:34:50 · 621 阅读 · 1 评论 -
图的m着色问题
#include <iostream>const int maxn = 100;using namespace std;int n; //图的顶点数 int k; //图的边数 int m; //可用颜色数 int graph[maxn][maxn]; //图的邻接矩阵graph[i][j]=1, 表示第i个顶点和第j int x[maxn]; //当前解, 记录解空间树从根结点至当前结点的路径所表示的部分解 long long int sum.原创 2020-12-21 19:34:38 · 147 阅读 · 0 评论 -
旅行商售货问题
#include <iostream>#include <algorithm>using namespace std;const int maxn = 100;const int NoEdge = 0x3f3f3f3f; //用最大值代表两城市间无边 int n; //城市个数 int m; //邻接矩阵graph边数 int x[maxn]; //当前解,表示从解空间树根到当前结点代表的所经过的城市 int bestx[maxn]; /.原创 2020-12-21 19:32:47 · 176 阅读 · 0 评论 -
0-1背包问题(回溯法+非递归实现)
参考:https://blog.csdn.net/peachhhh/article/details/111475680#include <iostream>#include <algorithm>using namespace std;int n; //物品数量 int c; //背包容量 int cw; //当前背包重量 int cp; //当前背包装入物品价值 int bestp; //装包最大价值 int bestw; //.原创 2020-12-21 19:14:15 · 688 阅读 · 0 评论 -
非递归回溯法实现0-1背包问题
<article class="baidu_pl"> <div id="article_content" class="article_content clearfix"> <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css"> ...转载 2020-12-21 16:01:45 · 370 阅读 · 0 评论 -
0-1背包问题(回溯法+递归实现)
问题描述:假设有7个物品,它们的重量和价值如下表所示。若这些物品均不能被分割,且背包容量C=150,使用回溯方法求解此背包问题 物品 A B C D E F G 重量 35 30 60 50 40原创 2020-12-20 17:27:19 · 2284 阅读 · 1 评论 -
程序存储问题
程序存储问题问题描述:设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是i l , 1 ≤i ≤n。程序存储问题要求确定这n 个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。对于给定的n个程序存放在磁带上的长度,编程计算磁带上最多可以存储的程序数。思路:根据程序长度进行非降序排序,接着遍历l数组,判断每一段l[i]是否小于L,小于则count++,L -=l [i]代码如下:#include <iostream>#i原创 2020-12-16 20:53:34 · 1104 阅读 · 0 评论 -
虚拟汽车加油问题(贪心算法求解与C++实现)
问题描述:一辆汽车加满油后可行驶 n km。旅途中有若干加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。算法设计:对于给定的n和k个加油站位置,计算最少加油次数。数据输入:n:表示汽车加满油后可行驶 n km k:旅途中有k个加油站 k+1个整数:表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。数据输出:最少加油次数和具体在哪几个加油站加油,如果无法到达目的地,...原创 2020-12-16 17:26:43 · 2208 阅读 · 1 评论 -
回溯法求解装载问题(DFS + 剪枝策略)
参考:https://blog.csdn.net/m0_38015368/article/details/80196634问题描述:有n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且问是否有一个合理的装载方案,可将这n个集装箱装上这2艘轮船。如果有,找出一种装载方案。问题分析:如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。(1)首先将第一艘轮船尽可能装满;(2)将剩余的集装箱装上第二艘轮船。将第一艘轮船尽可能装满等价于选取全体集装箱的原创 2020-12-16 11:38:12 · 2117 阅读 · 0 评论 -
哈夫曼编码
#include <bits/stdc++.h>using namespace std;const int inf = 0x3f3f3f3f;typedef struct { char c; int weight; int lchild; int rchild; int parent; bool flag;}Huffman_Node;//寻找权值最小的两个结点,即lchild, rchild; void Select_Min(Huffman_Node Nodes[原创 2020-12-14 21:53:59 · 173 阅读 · 0 评论 -
快速排序
#include <iostream>using namespace std;int Partition(int a[], int left, int right){ int i = left, j = right + 1; int k = a[left]; while(1) { while(a[++i] < k && i < right); while(a[--j] > k); if(i >= j) break; in原创 2020-12-11 15:19:46 · 111 阅读 · 0 评论 -
0-1背包问题的动态规划算法实现
#include <bits/stdc++.h>using namespace std;const int N = 6; //物品的数量const int W = 10; //背包最大容量int m[N][W];int v[N] = {0, 6, 3, 5, 4, 6}; //物品价值, 0号位置为空 int w[N] = {0, 2, 2, 6, 5, 4}; //物品重量, 0号位置为空, 不使用 int x[N]; void knapsack(int v[], i原创 2020-12-08 17:05:16 · 254 阅读 · 0 评论 -
独立任务最优调度问题 (动态规划dp)
参考:https://blog.csdn.net/LDUtyk/article/details/53995281独立任务最优调度问题:使用dp[i][j]数组表示的是第i个作业时,机器a花费不小于j时间的前提下,机器b完成作业i所需的最少时间。当机器a在时间j的时候小于a[i]时,当然只能由b机器完成,如果时间j大于a[i],那么考虑是由a还是b机器完成才好,给a处理的话,b花费时间是dp[i-1][j-a[i]],给b处理的话,b花费时间是dp[i-1][j]+b[i-1];从中取小值作为d原创 2020-12-07 20:12:09 · 1190 阅读 · 1 评论