当前位置: 首页 > news >正文

济南网站建设培训重大军事新闻最新消息

济南网站建设培训,重大军事新闻最新消息,wordpress 添加评论等级,南京网站建设开发公司迪杰斯特拉算法(Dijkstras algorithm)是由荷兰计算机科学家艾兹格迪科斯彻(Edsger W. Dijkstra)在1956年提出的,用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。这个算法广泛应用于网络路由、地图导航等领…

迪杰斯特拉算法(Dijkstra's algorithm)是由荷兰计算机科学家艾兹格·迪科斯彻(Edsger W. Dijkstra)在1956年提出的,用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。这个算法广泛应用于网络路由、地图导航等领域。

算法原理

迪杰斯特拉算法的核心思想是贪心算法,它维护一个未访问顶点集合,每次从未访问顶点集合中选择一个距离源点最近的顶点,然后更新该顶点相邻的顶点的距离。

算法步骤

  1. 初始化:将源点到自身的距离设为0,到所有其他顶点的距离设为无穷大(∞)。创建一个未访问顶点集合,包含图中所有顶点。

  2. 选择顶点:从未访问顶点集合中选择一个距离源点最近的顶点,将其标记为已访问。

  3. 更新距离:对于已选择的顶点,检查其所有相邻的未访问顶点,计算通过当前顶点到达这些相邻顶点的距离,并更新它们到源点的距离(如果新计算的距离比之前记录的距离更短)。

  4. 重复:重复步骤2和3,直到所有顶点都被访问过。

算法特点

  • 效率:迪杰斯特拉算法的时间复杂度为 O(V2)O(V2),其中 VV 是顶点的数量。使用优先队列可以将其优化到 O((V+E)log⁡V),其中 E是边的数量。

  • 适用性:适用于边权重为非负的图。

  • 局限性:如果图中存在负权重边,则迪杰斯特拉算法可能不会给出正确的结果。

代码实现:

#include<bits/stdc++.h>using namespace std;int n, m;//n为顶点数,m为边数
int matrix[100][100];//邻接矩阵//初始化邻接矩阵
void init() {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (i == j) {matrix[i][j] = 0;} else {matrix[i][j] = INT_MAX;}}}
}//初始化beginPoint到其他点的距离
vector<int> initBeginDistance(int beginPoint) {vector<int> beginDistance;for (int i = 0; i < n; i++) {beginDistance.push_back(matrix[beginPoint][i]);}return beginDistance;
}//更新beginPoint到其他点的距离
void updateMatrix(int beginPoint, vector<int> distances) {for (int i = 0; i < n; i++) {matrix[beginPoint][i] = distances[i];}
}//打印邻接矩阵
void printMatrix() {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << matrix[i][j] << " ";}cout << endl;}
}int main() {cin >> n >> m;init();//初始化邻接矩阵for (int i = 0; i < m; i++) {int x, y, dist;//x为起点,y为终点,distance为距离cin >> x >> y >> dist;matrix[x][y] = dist;}vector<int> already, unalready;//already为已经确定最短路径的点,unalready为未确定最短路径的点for(int beginPoint = 0; beginPoint < n; beginPoint++) {for(int i = 0; i < n; i++) {if(i != beginPoint) {unalready.push_back(i);} else {already.push_back(i);}}//初始化beginPoint到其他点的距离vector<int> distances = initBeginDistance(beginPoint);while(unalready.size() > 0) {int minDistance = INT_MAX, minIndex = -1;//通过already中的点来更新beginPoint到unalready中的点的距离for(int j = 0; j < unalready.size(); j++) {if(distances[unalready[j]] <= minDistance) {minDistance = distances[unalready[j]];minIndex = unalready[j];}}//将距离最小的点加入到already中,并从unalready中删除,并且跟新beginPoint到其他点的距离already.push_back(minIndex);unalready.erase(remove(unalready.begin(), unalready.end(), minIndex), unalready.end());// 遍历未访问的节点for(int j = 0; j < unalready.size(); j++) {// 如果当前节点可以到未访问节点,并且未访问节点的距离大于当前节点到未访问节点的距离加上当前节点的距离if(matrix[minIndex][unalready[j]] != INT_MAX && distances[unalready[j]] > distances[minIndex] + matrix[minIndex][unalready[j]]) {// 更新未访问节点的距离distances[unalready[j]] = distances[minIndex] + matrix[minIndex][unalready[j]];}}}updateMatrix(beginPoint, distances);}printMatrix();return 0;
}//输入:
// 5 11
// 0 1 8
// 0 2 32
// 1 0 12
// 1 2 16
// 1 3 15
// 2 1 29
// 2 4 13
// 3 1 21
// 3 4 7
// 4 2 27
// 4 3 19

http://www.yidumall.com/news/101181.html

相关文章:

  • 多语种网站建设方案贵州seo学校
  • wordpress手机站如何做新媒体运营岗位职责
  • 网站运营和维护都是干什么的百度一下百度网站
  • 批量做网站发布悬赏任务的推广平台
  • 做网站外包需要提供什么网络推广的基本方法有哪些
  • 新手做网站视频宁波网站建设方案推广
  • wordpress修改文章id关键词优化公司推荐
  • 去男科医院花了9000多广州优化疫情防控措施
  • 现在最长用的做网站软件是什么百度关键词搜索量排行
  • 请人代做谷歌外贸网站网站开发的一般流程
  • 推荐大良营销网站建设磁力猫torrent kitty
  • 怎么做b2b网站免费发外链平台
  • 做自己的网站挣钱网络推广哪家做得比较好
  • 部队网站建设外贸营销型网站建设公司
  • 网站域名备案变更百度seo多久能优化关键词
  • 大连模板网站制作价格seo推广软件排名
  • 网站投稿系统怎么做全球最受欢迎的网站排名
  • 太原网站优化网页开发用什么软件
  • 福田做商城网站建设哪家公司便宜点百度sem
  • 电子商务公司建设网站方案设计北京营销型网站
  • 制作会员手机网站百度网盘搜索
  • 单一产品销售网站建设模板网站设计论文
  • 建设软件网站建网站建设
  • 网站开发项目策划书谷歌浏览器网页版入口
  • wordpress照片模糊无线网络优化是做什么的
  • wordpress建站教程阿里云百度最新收录方法
  • 视频网站怎么做压力测试seo优化服务商
  • 阿里做外贸是哪个网站专业营销团队外包公司
  • 免费b2b网站要怎么做百度网站提交入口网址
  • 成都网站建设优化推网络营销策划方案模板范文