贪心算法的主要思想就是通过不断求解局部最优解,最后求出最优解或者最优解的近似值,不能保证一定为最优解。

Dijistra算法,选取没有选择过的点到已经选择过得点组成的集合中最短的距离的点。然后更新已选择的点到没有选择的点的距离。

已经选择的点是一个整体。

具体算法如下:

#include <iostream>
#include <stack> using namespace std; const int IDF = 1e7; //距离最大值
const int N = ; //点的数量最大值
int map[N][N]; //点与点之间的距离
int n; //点的数量
int m; //线的数量
int dist[N]; //源点到其他点的距离
bool flag[N]; //是否已加入找到集
int p[N]; //记录路径 void Dijkstr(int u); //计算距离 void findpath(int u); int main() {
int u, v, w; //起点 终点 权重
cout << "请输入点的个数:";
cin >> n;
cout << "请输入线的数量:";
cin >> m;
//初始化
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
map[i][j] = IDF;
}
}
cout << "请输入两点及两点之间的距离:" << endl;
while (m > ) {
cin >> u >> v >> w;
map[u][v] = min(w, map[u][v]);
m--;
}
cout << "请输入起点:";
cin >> u;
cout << "信息输入完毕,开始计算地杰斯特拉距离" << endl;
Dijkstr(u);
findpath(u);
return ;
} void findpath(int u) {
int temp;
stack<int> s;
cout<<"源点为:"<<u<<endl;
for(int i = ; i < n; i++){
temp = p[i];
while(temp != -){
s.push(temp);
temp = p[temp];
}
cout<<u<<"到"<<i<<"的距离为:"<<dist[i]<<";路径为:";
while(!s.empty()){
cout<<s.top()<<"--";
s.pop();
}
cout<<i<<endl;
}
} void Dijkstr(int u) {
//初始化
for (int i = ; i < n; i++) {
dist[i] = map[u][i];
flag[i] = false;
if(dist[i] == IDF)
p[i] = -;
else
p[i] = u;
}
//初始化起点
dist[u] = ;
flag[u] = true;
for (int j = ; j < n; j++) {//找n次
//从没有找到的点中找最近的
int temp = IDF;
int t = u;
for (int i = ; i < n; i++) {
if (flag[i] == false && dist[i] < temp) {
temp = dist[i];
t = i;
}
}
if (t == u) { //没有找到 原距离不变
return;
}
//更新距离 找到t点
flag[t] = true;
for (int i = ; i < n; i++) {
if (flag[i] == false && map[t][i] + dist[t] < dist[i]) {
dist[i] = map[t][i] + dist[t];
p[i] = t;
}
}
}
}

贪心算法之Dijkstra的更多相关文章

  1. [C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法)

    1 Dijkstra算法 1.1 算法基本信息 解决问题/提出背景 单源最短路径(在带权有向图中,求从某顶点到其余各顶点的最短路径) 算法思想 贪心算法 按路径长度递增的次序,依次产生最短路径的算法 ...

  2. [C++]多源最短路径(带权有向图):【Floyd算法(动态规划法)】 VS n*Dijkstra算法(贪心算法)

    1 Floyd算法 1.1 解决问题/提出背景 多源最短路径(带权有向图中,求每一对顶点之间的最短路径) 方案一:弗洛伊德(Floyd算法)算法 算法思想:动态规划法 时间复杂度:O(n^3) 形式上 ...

  3. 最短路径算法之Dijkstra算法(java实现)

    前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知 ...

  4. 求最短路径的三种算法: Ford, Dijkstra和Floyd

    Bellman-Ford算法 Bellman-Ford是一种容易理解的单源最短路径算法, Bellman-Ford算法需要两个数组进行辅助: dis[i]: 存储顶点i到源点已知最短路径 path[i ...

  5. 单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)

    Dijkstra's algorithm 迪杰斯特拉算法是目前已知的解决单源最短路径问题的最快算法. 单源(single source)最短路径,就是从一个源点出发,考察它到任意顶点所经过的边的权重之 ...

  6. leetcode 贪心算法

    贪心算法中,是以自顶向下的方式使用最优子结构,贪心算法会先做选择,在当时看起来是最优的选择,然后再求解一个结果的子问题. 贪心算法是使所做的选择看起来都是当前最佳的,期望通过所做的局部最优选择来产生一 ...

  7. 贪心算法(Greedy Algorithm)

    参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...

  8. 算法导论----贪心算法,删除k个数,使剩下的数字最小

    先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...

  9. LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]

    Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...

随机推荐

  1. Win10安装msi程序报错2503和2502错误解决方案

    刚升级了系统到win10,重新搭建开发环境,在安装scala的时候一直报2503.2502错误,如图 试了好几种办法都不好使,现在罗列依次用到的三种方法: 一.命令提示符(管理员)启动 "w ...

  2. itext-2.1.7.jar

    iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. ...

  3. pycharm 设置字体大写和显示代码行号

    打开pycharm,我们看到左边是没有行号显示的. 在工具栏中点击扳手的标志,打开.       找到 Ide-setting  ——>Editor ——>Apperance ——> ...

  4. UVa 1262 - Password(解码)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. MyBatis(9)整合spring

    具体的感兴趣可以参考:MyBatis 此时此刻,没用的话不再多说了,直接开始代码工程吧! 整体的代码实现: 具体使用到的我们在进行细说 基本上理解一边就能会使用整合  准备工作:  db.proper ...

  6. WMIC常用

    显示详细的进程信息 查找进程的具体路径 通过比较严查可疑文件 显示本机安装的软件

  7. ASP.NET SingalR + MongoDB 实现简单聊天室(三):实现用户群聊,总结完善

    前两篇已经介绍的差不多了,本篇就作为收尾. 使用hub方法初始化聊天室的基本步骤和注意事项 首先确保页面已经引用了jquery和singalR.js还有对应的hubs文件,注意,MVC框架有时会将jq ...

  8. android中OpenMax的实现【2】AwesomePlayer中openmax的入口

    AwesomePlayer 中有个变量 OMXClient mClient; 让我们看看   OMXClient class OMXClient { public: OMXClient(); stat ...

  9. java 编写小工具 尝试 学习(一)

    1.单片机 调试经常 需要  用 串口 工具 发送 一些 特定的  协议或者 命令,每次要 翻译  写成 2进制 很麻烦 ,因此 打算自己用 java 写一个 工具 方便自己  调试,2017年3月2 ...

  10. JQuery给一个元素绑定两次点击事件(第二次点击事件)

    由于项目的要求,需要给复选框设置样式,初始样式:,第一次点击的时候显示,第二次点击时候需要改变该样式:. 设计思路: 当点击次数为奇数时显示带有颜色的图片 当点击次数为偶数时显示没有颜色的图片 下边是 ...