zufeoj_最短路径迪杰斯特拉算法入门
程序员文章站
2022-04-06 18:45:55
...
题目链接:http://acm.ocrosoft.com/problem.php?cid=1172&pid=60
题目描述
如图,求最短路径。
输入
顶点数n 边数m
m条边的顶点和权值
某两个顶点
输出
顶点0到每个顶点的最短路径
样例输入
6 9
0 2 5
0 3 30
1 0 2
1 4 8
2 1 15
2 5 7
4 3 4
5 3 10
5 4 18
0 4
样例输出
28
#include<bits/stdc++.h>
using namespace std;
int u,v,w;
int n,m;
int st,en;
int e[111][111],dis[111],vis[111];
const int inf=9999999;
void Dijkstra(int st,int en){
int u,v;
for(int i=0;i<n;i++){
dis[i]=e[st][i];
}
dis[st]=0;
vis[st]=1;
int minn;
for(int i=0;i<n-1;i++){
minn=inf;
for(int j=0;j<n;j++){
if(vis[j]==0&&dis[j]<minn){
minn=dis[j];
u=j;
}
}
if(minn==inf)
break;
vis[u]=1;
for(v=0;v<n;v++){
if(e[u][v]<inf){
if(vis[v]==0&&dis[v]>dis[u]+e[u][v]){
dis[v]=dis[u]+e[u][v];
}
}
}
}
cout<<dis[en]<<endl;
}
int main(){
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j){
e[i][j]=0;
}else{
e[i][j]=inf;
}
}
}
for(int i=0;i<m;i++){
cin>>u>>v>>w;
e[u][v]=w;
}
cin>>st>>en;
Dijkstra(st,en);
return 0;
}
推荐阅读
-
Java 迪杰斯特拉算法实现查找最短距离的实现
-
基于Python实现迪杰斯特拉和弗洛伊德算法
-
迪杰斯特拉(Dijkstra)算法(Python)
-
狄克斯拉特算法。 适用于,加权有向无环图,且无负权边,的最短路径计算。
-
js图数据结构处理 迪杰斯特拉算法代码实例
-
c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
-
迪杰斯特拉算法(Dijkstra)
-
Python实现迪杰斯特拉算法并生成最短路径的示例代码
-
邻接矩阵prim:php实现图的邻接矩阵及普里姆(prim算法),弗洛伊德(floyd),迪杰斯特拉(dijkstra)算法
-
13.GIS中Dijkstra(迪杰斯特拉)算法如何实现?(JavaScript版本有向图)