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

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. Python 编码为什么那么蛋疼?

    据说,每个做 Python 开发的都被字符编码的问题搞晕过,最常见的错误就是 UnicodeEncodeError.UnicodeDecodeError,你好像知道怎么解决,遗憾的是,错误又出现在其它 ...

  2. EDM邮件群发:群发邮件不进垃圾箱的独家秘笈

    EDM邮件群发想要群发的邮件避免进入垃圾箱,不仅需要优化邮件内容和主题,管理收件人邮箱列表,还要有多服务器IP分流技术,控制发信速度,打乱收件人列表等手段,当然更少不了借助专业的邮件群发平台譬如U-M ...

  3. (转)对于ESP、EBP寄存器的理解

    原文地址https://blog.csdn.net/yeruby/article/details/39780943 esp是栈指针,是cpu机制决定的,push.pop指令会自动调整esp的值: eb ...

  4. postgres if ,when及判断表是否存在的sql编写

    判断表是否存在方法1: SELECT THEN END FROM ( select count(*) as cc from pg_class where relname = 'wo' --wo is ...

  5. openCV2马拉松第19圈——Harris角点检測(自己实现)

    计算机视觉讨论群162501053 转载请注明:http://blog.csdn.net/abcd1992719g/article/details/26824529 收入囊中 使用OpenCV的con ...

  6. PHP语言开发微信公众平台(订阅号)之curl命令(补充)

    在之前的一篇随笔中,博主在调用curl命令上传文件时会经常出现上传方法过时的情况.如下图所示: 所以,我们只需要把上传方法换成创建CURLFile 类即可.如下所示 $ch = curl_init() ...

  7. MyBatis框架(4)全局文件

    本次全部学习内容:MyBatisLearning   全局配置文件(本次案例中):

  8. Linux 进程与信号的概念和操作 linux process and signals

    进程 主要参考: http://www.bogotobogo.com/Linux/linux_process_and_signals.php 译者:李秋豪 信号与进程几乎控制了操作系统的每个任务. 在 ...

  9. zabbix-agent安装

    1.下载yum源库 rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm ...

  10. Spring mvc实现ex导入导出

    依赖架包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</arti ...