最短路模板
1、邻接矩阵+迪杰斯特拉
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAX=3e2;
const LL INF=0x3f3f3f3f;
LL n,m,s,t,k;
LL dis[MAX+5];
LL a[MAX+5][MAX+5];
bool vis[MAX+5];
void diji(LL s)
{
vis[s]=true;
while(1){
LL k=-1,len=INF;
for(LL i=1;i<=n;i++){
if(!vis[i]&&len>dis[i]){
len=dis[i];
k=i;
}
}
if(k==-1){
break;
}
vis[k]=1;
for(LL i=1;i<=n;i++){
if(!vis[i]&&dis[i]>dis[k]+a[k][i]){
dis[i]=dis[k]+a[k][i];
}
}
}
}
int main()
{
while(scanf("%lld%lld",&n,&m)!=EOF){
if(n==0&&m==0){
break;
}
s=1,t=n;
for(LL i=1;i<=n;i++){
for(LL j=1;j<=n;j++){ ///邻接矩阵要初始化
if(i==j) a[i][j]=0;
else a[i][j]=INF;
}
}
for(LL i=0;i<m;i++){
LL u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
a[u][v]=w;
a[v][u]=w;
}
for(LL i=1;i<=n;i++){ ///dis数组表示起点s到各个点的距离
dis[i]=a[s][i];
vis[i]=false;
}
diji(s);
printf("%lld\n",dis[t]);
}
return 0;
}
2、链式前向星+