#include <iostream>
#include <vector>
#include <string>
#include <cstring>
using namespace std;
struct Edge{
int length;
int to;
Edge(int to,int length):to(to),length(length){}
};
vector<Edge> graph[10];
int dis[100];
int visit[100];
int n,m;
void Dijkstra(int start){
for(int i=0;i<n;i++){
dis[i]=10000;
}
dis[start]=0;
for(int i=0;i<n;i++){
int u=-1;
//找dis中没访问过且最小的
for(int j=0;j<n;j++){
if(visit[j]==1){
continue;
}
if(u==-1||dis[j]<dis[u]){
u=j;
}
}
//根据u进行dis更新
for(int j=0;j<graph[u].size();j++){
int a=graph[u][j].to;
int d=graph[u][j].length;
if(dis[a]>dis[u]+d){
dis[a]=dis[u]+d;
}
}
printf("\n");
visit[u]=1;
}
}
//时间复杂度:O(v^2)
int main(){
int from,to,length;
scanf("%d%d",&n,&m);
memset(graph,0, sizeof(graph));
for(int i=0;i<m;i++){
scanf("%d%d%d",&from,&to,&length);
graph[from].push_back(Edge(to,length));
graph[to].push_back(Edge(from,length));
}
int start,end;
scanf("%d%d",&start,&end);
Dijkstra(start);
if(dis[end]==10000){
dis[end]=-1;
}
printf("%d",dis[end]);
return 0;
}
最短路径
最新推荐文章于 2024-09-22 11:42:19 发布