首先区分一下最短路径和最小生成树的区别
再更新一篇模板(带路径):最短路径(dijkstra)以及输出路径
最短路径:给你一个无向图或者有向图,求两个点之间的最小距离
最小生成树:给你一个无向图或者有向图,让你求怎样才能把所有的点全部连起来,然后使得走过的距离最小;(同样可以判断图中是否有环,或者是否连通)
#include <bits/stdc++.h>
using namespace std;
const int maxx=1e3+7;
#define INF 0x3f3f3f3f
int dist[maxx];
int c[maxx][maxx];
int s[maxx];
int v,e,n,m;
void dijkstra()
{
for(int i=1;i<=n;i++) dist[i]=c[v][i];
dist[v]=0;
s[v]=1;
for(int i=2;i<=n;i++)
{
int temp=INF;
int u=v;
for(int j=1;j<=n;j++)
{
if(!s[j]&&dist[j]<temp)
{
u=j;
temp=dist[j];
}
}
s[u]=1;
for(int j=1;j<=n;j++)
{
if(!s[j]&&c[u][j]<INF)
{
int newdist=dist[u]+c[u][j];
if(newdist<dist[j])
dist[j]=newdist;
}
}
}
}
int main()
{
while(scanf("%d %d",&n,&m)&&n&&m)
{
memset(dist,INF,sizeof dist);
memset(c,INF,sizeof c);
memset(s,0,sizeof s);
int x,y,t;
for(int i=1;i<=m;i++)
cin>>x>>y>>t,c[x][y]=t,c[y][x]=t;
v=1,e=n;
dijkstra();
cout <<dist[n]<<endl;
}
return 0;
}