秦皇岛外贸网站建设,信息服务公司的经营范围有哪些,郑州餐饮网站建设哪家好,《网站推广策划》贪心算法#xff08;Greedy Algorithm#xff09;是一种常见的算法思想#xff0c;它在每一步选择当前状态下最优的解决方案#xff0c;从而希望最终能够达到全局最优解。
贪心算法的基本思路是每一步都选择当前状态下的局部最优解#xff0c;而忽略了当前选择所带来的影…贪心算法Greedy Algorithm是一种常见的算法思想它在每一步选择当前状态下最优的解决方案从而希望最终能够达到全局最优解。
贪心算法的基本思路是每一步都选择当前状态下的局部最优解而忽略了当前选择所带来的影响因此并不一定能够得到全局最优解。然而在某些问题上贪心算法确实能够得到最优解而且贪心算法通常具有较高的执行效率。
经典的贪心算法问题包括
钱币找零给定若干面额不同的硬币找零时使用最少的硬币数目。区间调度给定若干活动的开始时间和结束时间安排活动使得参与的活动数最大。最小生成树在一个连通加权图中找到一棵包含全部顶点且边的权值之和最小的生成树。
贪心算法在解决一些最优化问题时特别有用但是并不适用于所有类型的问题。因此在使用贪心算法时需要仔细分析问题的特性以确定是否适合采用贪心策略。
如您有关于贪心算法的具体问题或需求欢迎随时与我交流讨论。
#include stdio.h
#include limits.h#define V 5 // 图中顶点的数量int minKey(int key[], bool mstSet[]) {int min INT_MAX, min_index;for (int v 0; v V; v)if (mstSet[v] false key[v] min)min key[v], min_index v;return min_index;
}void printMST(int parent[], int n, int graph[V][V]) {printf(Edge \tWeight\n);for (int i 1; i V; i)printf(%d - %d \t%d \n, parent[i], i, graph[i][parent[i]]);
}void primMST(int graph[V][V]) {int parent[V]; // 存储构造MST的结果int key[V]; // 存储键值用于选择在MST中包含的点bool mstSet[V]; // 用于表示MST中的顶点集合for (int i 0; i V; i)key[i] INT_MAX, mstSet[i] false;key[0] 0; parent[0] -1; // 第一个顶点总是MST的根节点for (int count 0; count V-1; count) {int u minKey(key, mstSet);mstSet[u] true;for (int v 0; v V; v)if (graph[u][v] mstSet[v] false graph[u][v] key[v])parent[v] u, key[v] graph[u][v];}printMST(parent, V, graph);
}int main() {int graph[V][V] {{0, 2, 0, 6, 0},{2, 0, 3, 8, 5},{0, 3, 0, 0, 7},{6, 8, 0, 0, 9},{0, 5, 7, 9, 0}};primMST(graph);return 0;
}