迪杰斯特拉算法代码呈现c++
时间: 2024-05-19 10:09:01 浏览: 104
迪杰斯特拉算法(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;
}
```
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pptx](https://img-home.csdnimg.cn/images/20241231044947.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)