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

山东网站建设哪里有为企业做一个网站多少钱

山东网站建设哪里有,为企业做一个网站多少钱,网站设计案例欣赏,网站建设包括哪些内容文章目录 最短路径的基本概念dijsktra的算法思想dijkstra的代码实现dijkstra的堆优化dijkstra的应用场景 最短路径的基本概念 1.路径长度:一条路径上所经过的边的数目 2.带权路径长度:路径上所经过边的权值之和 3.最短路径:带权路径长度值最…

文章目录

    • 最短路径的基本概念
    • dijsktra的算法思想
    • dijkstra的代码实现
    • dijkstra的堆优化
    • dijkstra的应用场景

最短路径的基本概念

1.路径长度:一条路径上所经过的边的数目
2.带权路径长度:路径上所经过边的权值之和
3.最短路径:带权路径长度值最小的那条路径
那么在一个图中,我们如果要求出起点到终点的最短路径,我们就需要用到最短路径算法。常见的最短路径算法有dijkstra,Floyd ,Ford,SPFA四种,我们这节仅介绍dijkstra算法。

dijsktra的算法思想

dijkstra算法的实质其实时不断更新dist数组的值(一个松弛的过程)来遍历图,最终得出起点到每一个点的最短路径长度。该算法基于贪心思想,初始时将起点到自己的距离设置为0,其它点都设置为无穷大,找到未被标记的dist数组中的最小值时,将其标记为1,再对该点的邻接点进行松弛操作重复即可。

dijkstra的代码实现

这里以邻接矩阵存储。

#include<iostream>
#define INF 10005
using namespace std;
int n, m;
int dist[105];//点i到起点的距离
int g[105][105];
int ans;
int vis[105];
int path[105];
void dijktra(int start) {vis[start] = 1;dist[start] = 0;path[start] = start;for (int i = 1;i <= n;i++) {if (g[start][i] < dist[i] && vis[i] == 0) {dist[i] = g[start][i];path[i] = start;}}int t, minn;for (int j = 2;j <= n;j++) {minn = INF;t = -1;for (int i = 1;i <= n;i++) {if (minn > dist[i]&&vis[i]==0) {minn = dist[i];t = i;}}vis[t] = 1;for (int i = 1;i <= n;i++) {if (g[t][i]+dist[t] < dist[i] && vis[i] == 0) {dist[i] = g[t][i] + dist[t];path[i] = t;}}}
}
int main() {cin >> n >> m;for (int i = 1;i <= n;i++) {for (int j = 1;j <= n;j++) {if (i != j) {g[i][j] = INF;}	}}int x, y, w;while (m--) {cin >> x >> y >> w;g[x][y] = g[y][x] = w;}cin >> x;dijktra(x);for (int i = 1;i <= n;i++) {printf("起点到%d的最短距离是%d,该路径为%d", i, dist[i],i);int p = i;while (path[p] != p) {printf("%d ", p);p = path[p];}printf("%d\n", p);}return 0;
}

dijkstra的堆优化

这里用到了c++ stl里面的优先队列的小顶堆,以链式前先星存储。

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
typedef pair<int, int> PII;
int n, m,cnt;
int dis[105];
int vis[105];
int s;
int head[105];
priority_queue<PII, vector<PII>, greater<PII>>q;
struct edge {int to, next, w;
}e[10005];
void add(int x, int y, int w) {e[cnt].to = y;e[cnt].w = w;e[cnt].next = head[x];head[x] = cnt;cnt++;
}
void dijkstra() {memset(dis, 0x3f, sizeof(dis));dis[s] = 0;q.push({ 0,s });while (!q.empty()) {PII t = q.top();q.pop();int u = t.second,d=t.first;if (vis[u])continue;vis[u] = 1;for (int i = head[u]; i != -1; i = e[i].next) {int v = e[i].to;if (vis[v] == 0 && dis[v] > dis[u] + e[i].w) {dis[v] = dis[u] + e[i].w;q.push({ dis[v],v });}}}
}
int main() {cin >> n >> m>>s;int x, y, w;memset(head, -1, sizeof(head));for (int i = 1; i <= m; i++) {cin >> x >> y >> w;add(x, y, w);}dijkstra();for (int i = 1; i <= n; i++) {cout << dis[i] << " ";}return 0;
}

dijkstra的应用场景

该算法适用于边权非负的有向图和无向图,通常用于解决单源最短路径问题。

http://www.dtcms.com/wzjs/573376.html

相关文章:

  • phpcms v9农业网站模板深圳跨境电商公司排名
  • 各行业网站建设方案书搜索引擎营销的英文简称
  • 网站建设-应酷鹤壁网站建设公司
  • 网站建设调查内容有哪些亚马逊做网站
  • 深圳知名的网站公司简介盘锦网站网站建设
  • 建设银行银行号查询网站外贸营销网站建设介绍
  • seo网站设计营销工具seo工具包括
  • 高校网站建设前言建筑信息查询平台
  • 如何做好一个网站猪八戒接单网
  • 免费建站软件专业的网站开发建设公司
  • 网站的百度地图怎么做的门户网站建设管理工作方案
  • 外贸网站建设步骤营销型网站建设实训总结
  • c网站开发西安网站维护公司
  • 站长工具ip查询网页建站建设教程
  • 百度做的网站 如果不做推广了 网站还保留吗已注册域名怎么做网站呢
  • 网站建设站点陈列设计师培训
  • 哪些网站免费做职业测评网站开发工程师简介
  • 自己电脑可以做网站服务器吗wordpress主机 seo
  • 一站式商家服务平台专业的营销型网站培训中心
  • 北京中小企业网站建设网站站长统计怎么弄
  • 电子商务网站的建设步骤有上海公关策划有限公司
  • 网站弹出网站开发系统
  • 做企业网站国内发展安徽省住房和建设执业资格注册中心网站
  • 厦门市房地产建设局网站0基础做网站工具
  • 网站设计制作价格怎么样新零售是什么模式
  • 长沙好博网站建设有限公司湖南网站开发公司
  • 牛网网站建设wordpress 128m内存
  • 合肥快速建站在线咨询营业执照解除异常收费多少钱
  • 公司禁用网站怎么做做电商没几个能赚钱的
  • 重庆智能模板建站大型门户网站建设定做