本人嫌链式前向星太麻烦,所以用邻接数组写的dijkstra,结果一个点都没过
代码如下:
#include <bits/stdc++.h>
using namespace std;
int g[2505][2505];
int n,m,s,t;
int d[2505];
bool vis[2505];
void dij(int s){
memset(d,0x3f,sizeof(d));
for (int i=1;i<=n;i++){
int mind=0x3f3f3f3f;
int v=0;
for (int j=1;j<=n;j++){
if (!vis[j] && d[j]<mind){
mind=d[j];
v=j;
}
}
if (mind==0x3f3f3f3f){
return;
}
vis[v]=true;
for (int j=1;j<=n;j++){
d[j]=min(d[j],d[v]+g[v][j]);
}
}
}
int main(){
memset(g,0x3f,sizeof(g));
cin>>n>>m>>s>>t;
for (int i=1;i<=n;i++){
g[i][i]=0;
}
for (int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
g[u][v]=g[v][u]=w;
}
dij(s);
cout<<d[t];
return 0;
}