https://www.acwing.com/solution/content/23358/
这位大佬讲的很细很细,也算是干货博主了,
这是模板主要按照这个模板来进行的dijkstra。记住模板思路就很好理解了,memset(h,0x3f,sizeof)对h赋值的其实是0x3f3f3f3f,这是一个难点吧。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=510;
int n,m;
int g[N][N],dist[N];
bool s[N];
int main(void)
{
cin>>n>>m;
memset(dist ,0x3f, sizeof dist);
memset(g, 0x3f ,sizeof g);
dist[1]=0;
while(m--)
{
int x,y,z;
cin>>x>>y>>z;
g[x][y]=min(g[x][y],z);
}
for(int i=1;i<=n;i++)
{
int t=-1;
for(int j=1;j<=n;j++)
{
if(!s[j]&&(t==-1||dist[t]>dist[j]))
t=j;
}
s[t]=true;
for(int j=1;j<=n;j++)
dist[j]=min(dist[j],dist[t]+g[t][j]);
}
if(dist[n]==0x3f3f3f3f) puts("-1");
else
cout<<dist[n];
}