算法分析与设计课程设计报告书      

题目:Dijkstra最短路径算法

设计人:张钦颖

班级:14计科2班    学号:1414080901218

一、     实验环境:

1、硬件环境:个人机,CPU主频:4.01Ghz  内存:16G

2、软件环境:操作系统:win10

编程语言:C++

二、     实验任务解决方案:

1、         Dijkstra最短路径算法的流程图。

(1)  创建一组sptSet(最短路径数组),它存的是已经在SPT里的节点,也就是这些是已经计算过的,确定的最小值,一开始这里是空的。

(2)  给所有的给定图中的节点一个指定的距离值。将所有的距离值初始化为无限,将源节点初始为0。

(3)  当另一个(保存未放入SPT的节点的那个)不为空时:

① 选择一个不在SPTset中一个离源点距离最小的节点

② 把它加入SPTset

③ 更新所有于这个节点临近的节点的距离值。为了更距离值,遍历这个点所有的相邻点。对于每一个相邻的节点,如果这临近点u的距离值(从源节点开始的和)比v(新 加入的)小,就把v的距离值更新

例如:

一开始SPTset是空的,并且它初始化的距离值是{0,无限,无限,无限,无限,无限,无限,无限}。现在选择最小距离值的顶点。我们选了节点0,将它加入到sptSet。所以sptSet变为{0}。加入0至sptSet后,更新其相邻顶点的距离值。0相邻的节点为1和6,他们的距离值便被更新成3和4。图中标示出在SPT的顶点显示为绿色。

然后我们选择一个不包含在SPT里一个路径值为最小的一个节点,节点1被选了而且被加入到了sptSET,所以sptSET现在变为了{0,1}更新1临近节点的距离值,临近节点为2跟8,节点2跟8的距离值便变成了3+6=9、3+16=19。

像上面一样选一个,我们选了节点6,加入到sptSet,所以sptSet变成了{0,1,6},更新节点6的临近节点的距离值,临近节点是5和7,更新后5:4+20=24,7:4+10=14

然后我们再选一个2加入,sptSet又新来了一个数字2,2的临近节点3和8便更新为11和26.

一直重复这些事儿直到sptset包含所有的节点:

最后,我们终于得到了一棵完整的最短路径树

2、Dijkstra最短路径算法实现的关键代码。

#include <stdio.h>
#include <limits.h>// Number of vertices in the graph
#define V 9// A utility function to find the vertex with minimum distance value,from
// the set of vertices not yet included in shortest path tree
int minDistance(int dist[], bool sptSet[])
{// Initialize min valueint min = INT_MAX,min_index;for (int v = 0; v < V;v++)if (sptSet[v] == false&& dist[v] < min)min = dist[v],min_index = v;return min_index;
}// A utility function to print the constructed distance array
void printSolution(int dist[], int n)
{printf("顶点\t\t距离源点的最短路径\n");for (int i = 0; i < V;i++)printf("%d\t\t%d\n", i, dist[i]);
}// Funtion that implements Dijkstra's single source shortest pathalgorithm
// for a graph represented using adjacency matrix representation
void dijkstra(int graph[V][V], int src)
{int dist[V];     // The output array.  dist[i] will hold the shortest// distance from src to ibool sptSet[V]; // sptSet[i]will true if vertex i is included in shortest// path tree or shortestdistance from src to i is finalized// Initialize all distancesas INFINITE and stpSet[] as falsefor (int i = 0; i < V;i++)dist[i] = INT_MAX,sptSet[i] = false;// Distance of source vertexfrom itself is always 0dist[src] = 0;// Find shortest path forall verticesfor (int count = 0; count< V - 1; count++){// Pick the minimumdistance vertex from the set of vertices not// yet processed. u isalways equal to src in first iteration.int u =minDistance(dist, sptSet);// Mark the pickedvertex as processedsptSet[u] = true;// Update dist value ofthe adjacent vertices of the picked vertex.for (int v = 0; v < V; v++)// Update dist[v]only if distance to v is not in sptSet, there// is an edgefrom u to v, and total weight of path from src to// v through u issmaller than dist[v]if (!sptSet[v]&& graph[u][v] && dist[u] + graph[u][v] < dist[v])dist[v] = dist[u]+ graph[u][v];}// print the constructeddistance arrayprintSolution(dist, V);
}// driver program to test above function
int main()
{/* Let us create the examplegraph discussed above */int graph[V][V] = {{ 0, 3, 0, 0, 0, 0, 4,0, 0 },{ 3, 0, 6, 0, 0, 0, 0,0, 16 },{ 0, 6, 0, 2, 0, 0, 0,0, 17 },{ 0, 0, 2, 0, 4, 0, 0,0, 9 },{ 0, 0, 0, 4, 0, 11, 0,7, 0 },{ 0, 0, 0, 0, 11, 0,20, 0, 0 },{ 4, 0, 0, 0, 0, 20, 0,10, 0 },{ 0, 0, 0, 0, 7, 0, 10,0, 1 },{ 0, 16, 17, 9, 0, 0,0, 1, 0 }};dijkstra(graph, 0);return 0;
}

三、     Dijkstra最短路径算法的计算复杂度分析(最好、最差、平均情况复杂度):

(1) 最好的情况:每个顶点第一次检测到就是路径值就是最短路径。复杂度最低。

复杂度为:2n²+6n

(2) 最坏情况:顶点被检测了1次以上,并且每次检测都更新路径值为最小,即每次找的都不是最短路径,直到最后一次检测。复杂度最高

复杂度为:3n²+6n

(3) 平均情况复杂度:时间复杂度为O(n²)

四、     总结综合实验心得体会:

本次的Dijkstra最短路径算法在数据结构的课程上也接触过,所以感觉这个不成问题,选用的例子是自己随手画出来的,然后按照Dijkstra最短路径算法把流程步骤分别画了出来。然后其他部分参考了一下wiki以及geek论坛等国外大神的论文。还有很多东西老师在课堂上也给我们又讲了一遍,所以从算法思想上就不成多大问题了,主要是代码,而且必须得了解了算法才能mark得出代码来,否则根本无从下手。

算法分析与设计课程设计-Dijkstra最短路径算法相关推荐

  1. c 语言车牌识别系统课题设计,车牌识别系统的设计--课程设计报告.doc

    车牌识别系统的设计--课程设计报告 目录 一.摘要:3 二.设计目的和意义:3 2.1.设计目的:3 2.2.设计意义:3 三.设计原理:3 四.详细设计步骤:3 4.1.提出总体设计方案:4 4.2 ...

  2. 机械设计说明书_如何做机械设计课程设计?这篇文章总结很详细

    机械装置总体设计 今天和大家演示一遍机械设计课程设计的总体思路,老同学可以复习一下,新同学可以熟悉机械设计过程,掌握机械设计的一般方法和规律.机械装置如下图所示: 设计工作量和设计过程 1.设计工作量 ...

  3. aes算法c语言实现_C语言实现常用数据结构:Dijkstra最短路径算法(第18篇)

    「今天是学习C语言第 161 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」#题外话算法学习重点是学习如何编程使用它. # Dijkstra算法 Dijkstra算法,中文译名迪杰 ...

  4. Dijkstra最短路径算法——java代码实现

    具体的算法详解可以看这篇博客Dijkstra最短路径算法详解. 这里我利用.txt文件存储了有向加权图中顶点之间的连接关系以及边上的权重,文件格式如下: 代码所构造的有向加权图如下: package ...

  5. php网页课程设报告,网页设计课程设计报告

    <网页设计课程设计报告>由会员分享,可在线阅读,更多相关<网页设计课程设计报告(10页珍藏版)>请在人人文库网上搜索. 1.网页设计课程设计报告系别: 计算机科学系 班级: 0 ...

  6. c语言六位抢答器课程设计,基于c语言单片机8位竞赛抢答器设计课程设计.docx

    基于c语言单片机8位竞赛抢答器设计课程设计 课程设计报告课程名称:单片机课程设计报告题目:8位竞赛抢答器的设计学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013 年12月25 ...

  7. 中国石油大学《机械设计课程设计》在线考试

    中国石油大学(北京)远程教育学院 期 末 考 试 <机械设计课程设计> 学习中心:__ 姓名:_  学号:___     关于课程考试违规作弊的说明 1.提交文件中涉嫌抄袭内容(包括抄袭网 ...

  8. 用于《机械设计课程设计》中的减速箱设计的Python计算程序

    Requirement Python 3+ 1. Overview 几乎所有高校的机械类专业都有<机械设计课程设计>课程,课程内容几乎都是设计一个减速箱.可能是一级减速,二级减速等,可能是 ...

  9. C语言单相智能电表课程设计,《单相单用户电能表的设计课程设计》

    <<单相单用户电能表的设计课程设计>>由会员分享,可在线阅读,更多相关<<单相单用户电能表的设计课程设计>(10页珍藏版)>请在金锄头文库上搜索. 1. ...

最新文章

  1. AWR baseline template的管理
  2. Cpp / std::move 原理
  3. NEC SV8100电话交换机配置梓博电话计费系统
  4. js基础---数组方法
  5. POJ 3461 字符串匹配(KMP / 哈希(有推导))
  6. 怎样呵护友谊_呵护真正的友情,助力漫长的人生
  7. HTML5新特征、窍门和技术(11~15)
  8. 【优化算法】差分蜂群优化算法(DEABC)【含Matlab源码 1423期】
  9. 方正伪GBK(字体名称中有GBK且字数不足21003)字体列表及使用注意事项
  10. C# 使用 itextsharp
  11. 像程序员一样思考——解决问题
  12. cmos电路多余输入端能否悬空_CMOS电路多余输入端悬空会造成逻辑混乱,可以这样处理!...
  13. 梁宁产品思维 一张图
  14. UV-a1586-分子式
  15. DMA驱动框架流程编写
  16. Linux 桌面玩家指南:03. 针对 Gnome 3 的 Linux 桌面进行美化
  17. 特么,冒泡排序有这么难?
  18. InnoSetup打包自动签名
  19. android pdf编辑,PDF Reader Pro 功能强大的 PDF 阅读编辑器
  20. 2013年9月19日

热门文章

  1. linux操作系统之 组管理 终端命令(添加组删除组等命令)详解 简单易懂~
  2. 【数学建模】马氏链模型(基本概念+正则链+吸收链)
  3. WinForm中关于选择文件、目录操作
  4. Python的三层架构(基础篇)
  5. python实现三层神经网络 (BP)
  6. 如何获取谷歌广告ID
  7. 智方6000系五金交电销售管理系统 卡巴斯基反病毒软件
  8. c# SaveFileDialog保存textBox中的内容
  9. 马伊琍晒“哺乳照”的四重智慧
  10. leaflet电子海图加载openseamap,使用vue