dijkstra
这么久了突然想起没整过dijkstra...
把模板放这吧
#include<bits/stdc++.h> using namespace std; int f[2005][2005]; int dis[2005]; bool vis[2005]; int n,m; int main(){ memset(f,0x3f,sizeof(f)); for(int i=1;i<=n;i++) f[i][i]=0; scanf("%d%d",&n,&m); while(m){ m--; int a,b,c; scanf("%d%d%d",&a,&b,&c); f[a][b]=c; f[b][a]=c; } for(int i=1;i<=n;i++) dis[i]=f[1][i]; vis[1]=1; for(int i=1;i<=n;i++){ int now=1061109567,k=0; for(int j=1;j<=n;j++){ if(!vis[j]&&dis[j]<now){ now=dis[j]; k=j; } } if(!k) break; vis[k]=1; for(int j=1;j<=n;j++){ if(!vis[j]&&dis[j]>dis[k]+f[k][j]){ dis[j]=dis[k]+f[k][j]; } } } printf("%d",dis[n]); return 0; }
前向星的还在调试...改天放出来