迪杰斯特拉算法保姆级c++
时间: 2023-03-31 08:04:33 浏览: 216
迪杰斯特拉算法是一种用于解决最短路径问题的算法,它可以在有向图或者无向图中找到一个节点到其他所有节点的最短路径。在C语言中,实现迪杰斯特拉算法需要用到图的数据结构和堆的数据结构,可以通过优先队列或者堆来实现。因此,可以说迪杰斯特拉算法在C语言中是保姆级的。
相关问题
迪杰斯特拉算法代码呈现c++
迪杰斯特拉算法(Dijkstra's Algorithm)是一种用于寻找从单一起点到其他顶点的最短路径的贪心算法。以下是C++代码实现:
```
#include<iostream>
#include<cstring>
using namespace std;
#define MAXN 1001
#define INF 0x3f3f3f3f
int n, m, s, e; // n表示点数,m表示边数,s表示起点,e表示终点
int G[MAXN][MAXN]; //邻接矩阵存储图
int dist[MAXN]; //存储起点到各个点的最短距离
bool vis[MAXN]; //标记数组,标记某个点是否被访问过
void Dijkstra(){
memset(vis, 0, sizeof(vis)); //初始化标记数组
for(int i=1; i<=n; i++) dist[i] = INF; //初始化最短距离数组
dist[s] = 0; //起点到自己的距离为0
for(int i=1; i<n; i++){
int u = -1;
for(int j=1; j<=n; j++){
if(!vis[j] && (u==-1 || dist[u]>dist[j])) u = j; //找到未访问过的离起点最近的点
}
vis[u] = true; //标记该点已访问过
for(int v=1; v<=n; v++){
if(!vis[v] && G[u][v]!=INF && dist[v]>dist[u]+G[u][v]) dist[v] = dist[u]+G[u][v]; //更新与u相邻的未访问过的点的距离
}
}
}
int main(){
cin>>n>>m>>s>>e;
memset(G, 0x3f, sizeof(G)); //初始化邻接矩阵,将边权设为无穷大
for(int i=1; i<=m; i++){
int u, v, w;
cin>>u>>v>>w;
G[u][v] = G[v][u] = w;
}
Dijkstra(); //调用Dijkstra算法求解最短路径
cout<<dist[e]<<endl; //输出起点到终点的最短距离
return 0;
}
```
迪杰斯特拉算法流程图C++
抱歉,我暂时无法提供图片或流程图。但是我可以为您描述迪杰斯特拉算法的基本流程。
迪杰斯特拉算法是一种用于求解单源点最短路径的算法。它的基本思想是通过不断更新起始点到其他顶点的最短路径来逐步确定最短路径。
算法的流程如下:
1. 初始化:将起始点的最短路径设为0,将其他顶点的最短路径设为无穷大。
2. 选择最近顶点:从尚未确定最短路径的顶点中选择一个与起始点距离最近的顶点作为当前顶点。
3. 更新最短路径:以当前顶点为中转点,更新与其相邻顶点的最短路径。如果经过当前顶点到达某个相邻顶点的路径比之前已知的最短路径更短,则更新该顶点的最短路径值。
4. 标记已访问:将当前顶点标记为已访问。
5. 重复步骤2和3,直到所有顶点都被标记为已访问。
6. 最终得到起始点到其他所有顶点的最短路径。
请注意,这只是迪杰斯特拉算法的基本步骤,具体实现可能会有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [图解:最短路径之迪杰斯特拉算法](https://blog.csdn.net/kexuanxiu1163/article/details/106110278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [迪杰斯特拉Dijkstra算法C++实现](https://blog.csdn.net/qq_51462776/article/details/122148218)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文