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

网站备案需要关闭泉州网站设计平台

网站备案需要关闭,泉州网站设计平台,东营公共资源网招标信息,小工厂如何接外贸订单一、题目:城市交通最短路径规划 问题描述 某城市有N个交通节点(编号1~N)和M条单向道路。每条道路连接两个节点,并有一个长度值表示通过该道路的时间消耗。现需要计算从中央车站(节点1)到其他所有节点的最…

一、题目:城市交通最短路径规划

问题描述

某城市有N个交通节点(编号1~N)和M条单向道路。每条道路连接两个节点,并有一个长度值表示通过该道路的时间消耗。现需要计算从中央车站(节点1)到其他所有节点的最短通行时间。

输入格式

  • 第一行:两个整数N和M,表示节点数和道路数

  • 接下来M行:每行三个整数X, Y, D,表示从节点X到节点Y有一条长度为D的单向道路

  • 数据范围:1 ≤ N ≤ 100, 1 ≤ M ≤ 1000, 道路长度D为正整数

输出格式

  • 一行N个整数:表示从节点1到每个节点的最短时间,不可达输出-1

输入样例

6 9
1 2 2
1 4 15
2 3 5
2 4 3
2 5 4
3 6 10
3 5 12
4 5 3
5 6 6

输出样例

0 2 7 5 9 15

二、迪杰斯特拉算法详解

2.1算法核心思想

迪杰斯特拉算法是一种解决单源最短路径问题的经典算法,由荷兰计算机科学家Edsger Dijkstra于1956年提出。它采用贪心策略,逐步确定从源点到其他所有顶点的最短路径。

2.2算法特点

  • 适用于有向图或无向图

  • 要求边权值非负

  • 时间复杂度取决于实现方式(O(N²)或O(MlogN)

2.3算法执行步骤

  1. 初始化

    • 创建距离数组dist[],存储源点到各点的最短距离

    • 创建访问标记数组visited[],记录节点是否已处理

    • 设置源点距离为0,其他点为无穷大(INT_MAX)

  2. 主循环(执行N-1次):
    a. 选择当前距离最小且未访问的节点
    b. 标记该节点为已访问
    c. 更新该节点邻居的距离值

  3. 输出结果dist[]数组即为所求

  4. 执行步骤图:

三、邻接矩阵实现(适合稠密图)

#include <iostream>
#include <climits>
using namespace std;const int MAXN = 105;
const int INF = INT_MAX;int N, M;
int graph[MAXN][MAXN]; // 邻接矩阵存储图
int dist[MAXN];        // 存储最短距离
bool visited[MAXN];    // 访问标记数组void dijkstra(int start) {// 初始化距离数组和访问数组for (int i = 1; i <= N; i++) {dist[i] = graph[start][i];visited[i] = false;}dist[start] = 0;visited[start] = true;// 进行N-1次循环for (int count = 1; count < N; count++) {int minDist = INF;int u = -1;// 选择当前距离最小的未访问节点for (int i = 1; i <= N; i++) {if (!visited[i] && dist[i] < minDist) {minDist = dist[i];u = i;}}if (u == -1) break; // 所有可达节点已处理visited[u] = true; // 标记为已访问// 更新u的邻居节点距离for (int v = 1; v <= N; v++) {if (!visited[v] && graph[u][v] != INF) {if (dist[u] + graph[u][v] < dist[v]) {dist[v] = dist[u] + graph[u][v];}}}}
}int main() {cin >> N >> M;// 初始化邻接矩阵for (int i = 1; i <= N; i++) {for (int j = 1; j <= N; j++) {graph[i][j] = (i == j) ? 0 : INF;}}// 读入边for (int i = 0; i < M; i++) {int x, y, d;cin >> x >> y >> d;graph[x][y] = d;}dijkstra(1); // 从节点1开始// 输出结果for (int i = 1; i <= N; i++) {if (dist[i] == INF) cout << "-1 ";else cout << dist[i] << " ";}return 0;
}

四、算法优化:优先队列实现(适合稀疏图)

#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;typedef pair<int, int> pii; // first: 距离, second: 节点const int MAXN = 100005;
const int INF = INT_MAX;vector<pii> graph[MAXN]; // 邻接表
int dist[MAXN];
int N, M;void dijkstra(int start) {// 初始化距离数组for (int i = 1; i <= N; i++) {dist[i] = INF;}dist[start] = 0;// 小顶堆优先队列priority_queue<pii, vector<pii>, greater<pii>> pq;pq.push({0, start});while (!pq.empty()) {int u = pq.top().second;int d = pq.top().first;pq.pop();// 跳过已处理的旧数据if (d != dist[u]) continue;// 遍历邻居节点for (auto &edge : graph[u]) {int v = edge.first;int w = edge.second;// 松弛操作if (dist[u] + w < dist[v]) {dist[v] = dist[u] + w;pq.push({dist[v], v});}}}
}int main() {cin >> N >> M;// 构建邻接表for (int i = 0; i < M; i++) {int x, y, d;cin >> x >> y >> d;graph[x].push_back({y, d});}dijkstra(1);// 输出结果for (int i = 1; i <= N; i++) {if (dist[i] == INF) cout << "-1 ";else cout << dist[i] << " ";}return 0;
}

五、算法应用场景

  1. 网络路由:路由器计算最短路径

  2. 交通导航:GPS系统计算最快路线

  3. 社交网络:计算人际关系最短路径

  4. 游戏AI:寻路算法实现

  5. 物流规划:货物配送路径优化

六、算法变种与应用

1. 最小花费问题(带权值转换)
// 在松弛操作中修改更新公式:
dist[v] = min(dist[v], dist[u] * (1 - fee) + cost);
2. 多源BFS(分糖果问题)
void bfs(int start) {queue<int> q;q.push(start);dist[start] = 1;while (!q.empty()) {int u = q.front(); q.pop();for (int v : graph[u]) {if (dist[v] > dist[u] + 1) {dist[v] = dist[u] + 1;q.push(v);}}}
}
3. 限制条件的最短路径
  • 增加状态维度(如剩余油量)

  • 使用三维数组:dist[node][fuel]

七、复杂度分析

实现方式时间复杂度空间复杂度适用场景
邻接矩阵O(N²)O(N²)稠密图
邻接表+优先队列O((N+M)logN)O(N+M)稀疏图
斐波那契堆优化O(NlogN + M)O(N+M)理论最优

常见问题与解决

  1. 负权边问题:迪杰斯特拉不能处理负权边,改用Bellman-Ford或SPFA

  2. 大量节点:使用邻接表+优先队列优化

  3. 路径记录:增加prev[]数组记录前驱节点

  4. 多目标最短路径:以目标节点为源点反向计算


文章转载自:

http://yAMhSQrf.wknjy.cn
http://cMiqKNQ4.wknjy.cn
http://yzbc4tIM.wknjy.cn
http://DJeP4Ayl.wknjy.cn
http://diJWCVzt.wknjy.cn
http://PQQ8bTIx.wknjy.cn
http://qsyN4Udr.wknjy.cn
http://JmFNGY7J.wknjy.cn
http://nKbWJ5f4.wknjy.cn
http://U8cDsfdR.wknjy.cn
http://r44GQKkN.wknjy.cn
http://yC1nu9iI.wknjy.cn
http://dh8NqaCJ.wknjy.cn
http://o8v7ZbVs.wknjy.cn
http://O3DMSxIX.wknjy.cn
http://kIzJK7GC.wknjy.cn
http://KtSL2VL1.wknjy.cn
http://rpgaR5BR.wknjy.cn
http://G8UUs11P.wknjy.cn
http://mhNVYL9O.wknjy.cn
http://94mMfTm0.wknjy.cn
http://JoYX9Cp4.wknjy.cn
http://BpxFwo0T.wknjy.cn
http://u9srujn7.wknjy.cn
http://YpR7aMmf.wknjy.cn
http://eG5cRMDc.wknjy.cn
http://9ttDYnEi.wknjy.cn
http://f44lA4gM.wknjy.cn
http://edovzJ40.wknjy.cn
http://XKjfg98E.wknjy.cn
http://www.dtcms.com/wzjs/607982.html

相关文章:

  • 使用代理服务器后看什么网站网页设计模板及代码
  • 花乡科技园区网站建设网站界面大小
  • 开网站做一个交易所怎么做wordpress 3.7
  • 免费发布项目的网站兰州优化网站排名
  • 成都最好的网站建设福州电子网站建设
  • 电子政务和网站建设工作的总结流量卡
  • 广西省住房和城乡建设厅网站如何快速做网站排名
  • 网站实施建设流程深圳市网站建设公司设计公司
  • 做网站ps的图片济南网站建设 力推聚搜网络
  • 2008iis 网站 打不开济南网站建设与维护
  • 电子商务网站建设策划书网站类型wordpress3.7
  • 唐山网站建设怎么样网站推广策略和营销策略
  • 网站建设订单linux建设门户网站
  • 做网站的公司苏州电销外呼软件
  • 绍兴网站建设企业国外网站免费dns
  • html怎么做网站首页如何制作app软件
  • 网站建设-好发信息网自己开公司 自己做网站吗
  • 温州网站建设wzwmwl桂平网络推广
  • 空间站 对接小程序平台入口
  • 大型的营销型网站建设建模师的就业前景
  • 网站的制作建站人网站备案 新增接入
  • 云服务器哪家最便宜朱晓宇 大庆 seo 网站建设 北京
  • 网站开发培训学费人才网站源码
  • 陕西 网站备案黄石网站建设教程
  • 工业设计相关网站在线探测网站开发语言
  • 建设手机行网站wordpress延迟加载js
  • 济南建设局seo快排公司哪家好
  • 网站上的支付链接该怎么做新网站必须做301定向吗
  • seo快速推广窍门大公开网站建设优化推广安徽
  • 重庆做网站及公众号公司网站建设 目的