//迪杰斯特拉算法计算
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct edge{
int v,w,next;
edge(){}
edge(int _v,int _w,int _next){
v = _v;
w = _w;
next = _next;
}
}e[M*2];
int head[N],size;
void init(){
memset(head,-1,sizeof(head));
size = 0;
}
void insert(int u,int v,int w){
e[size] = edge(v,w,head[u]);
head[u] = size++;
}
void insert2(int u,int v,int w){
insert(u,v,w);
insert(v,u,w);
}
int dis[N];
bool vis[N];
void dijk(int u ){
memset(vis,false,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
dis[u] = 0;
for(int i = 0;i < n;i++){
int mind = 100000000,ming = -1;
for(int j = 1;j <= n;j++){
ming = j;
mind = dis[j];
if(ming = -1){
return;
}
vis[ming] = true;
for(int j = head[ming];~j;j = e[j].next){
int v = e[j].v;
int w = e[j].w;
if(!vis[v] && dis[v] > dis[ming] + w){
dis[v] = dis[ming] + w;
}
}
}
}
int main()
{
init();
int u,v,w;
while(m--){
cin >> u >> v >> w;
insert2(u,v,w);
}
dijk(1);
cout<<dis[n]<<endl;
return 0;
}
通过创建一个图的空白状态,然后再定义迪杰斯特拉的函数对其进行设置操作