最短路
最短路
单源最短路
Dijkstra算法
边权非负
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
struct Dijkstra{
#define MAXN 1234
#define INF 0x3f3f3f3f
int n,m,s,t;
int dis[MAXN],M[MAXN][MAXN];
bool vis[MAXN];
void init()
{
scanf("%d%d%d%d",&n,&m,&s,&t);//点个数,路个数,起点,终点
int u,v,c;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i!=j) M[i][j]=INF;
}
}
for(int k=0;k<m;k++){
scanf("%d%d%d",&u,&v,&c);
M[u][v]=M[v][u]=min(M[u][v],c);
}
}
void solve()
{
memset(vis,0,sizeof(vis));
fill(dis+1,dis+n+1,INF);
dis[s]=0;
for(int i=1;i<=n;i++){
int x,minn=INF;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]<=minn) minn=dis[x=j];
}
vis[x]=1;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]>dis[x]+M[x][j]) dis[j]=dis[x]+M[x][j];
}
}
printf("%d\n",dis[